1

我正在开发一个Android Wear使用WatchFace API(扩展CanvasWatchFaceService)的表盘。

我已经使用这里的代码构建了一个每秒运行代码的代码。

我遇到以下问题。服务有时会因此异常而崩溃。我不明白它来自哪里,如果你有任何线索,我会发布额外的代码。

01-06 11:22:00.247  12965-12965/com.my.package E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.my.package, PID: 12965
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.os.PowerManager$WakeLock.acquire()' on a null object reference
        at android.support.wearable.watchface.WatchFaceService$Engine.onCommand(WatchFaceService.java:201)
        at android.service.wallpaper.WallpaperService$Engine.doCommand(WallpaperService.java:977)
        at android.service.wallpaper.WallpaperService$IWallpaperEngineWrapper.executeMessage(WallpaperService.java:1191)
        at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:37)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5221)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

在这次崩溃之后,表盘停止工作并让它重新开始,我必须选择另一个表盘,然后重新选择我的,所以它是一个完整的显示停止器!

4

2 回答 2

4

支持大卫在super.电话中领先 - 事实证明这是问题所在。具体来说,该CanvasWatchFaceService.Engine.onCreate方法需要调用其祖先,如下所示:

private class Engine extends CanvasWatchFaceService.Engine {

    @Override
    public void onCreate(SurfaceHolder holder) {
        super.onCreate(holder);
        // your engine initialization code here
    }

    // other watch face engine code
}

没有super.onCreate(holder);电话,我的表盘会在几分钟内崩溃;有了它,它愉快地跑了一夜。

顺便说一句,Android 开发人员文档中缺少这些内容;具体来说,构建表盘服务的培训页面在其代码示例中不包含此祖先调用。

于 2015-01-12T17:05:00.243 回答
0

您链接的代码缺少一些重要的部分,这些部分是点缀的。即您是否定义了更新率?

private static final long INTERACTIVE_UPDATE_RATE_MS = TimeUnit.SECONDS.toMillis(1);

完全实施它运作良好。请参阅代码示例中的 AnalogWatchFaceService:Wearable/Watchface face。

于 2015-01-06T14:48:11.147 回答