Android 佩戴 Watchface 和 WakeLock
Android Wear Watchface and the WakeLock
我正在使用 WatchFace API
(扩展 CanvasWatchFaceService
)为 Android Wear
开发一个表盘。
我已经使用 here 中的代码构建了一个代码 每秒 .
运行的代码
我遇到了以下问题。服务时不时地因这个异常而崩溃。我不明白它是从哪里来的,如果你有任何线索,我会 post 额外的代码。
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)
在这次崩溃之后,表盘停止工作,要让它重新开始,我必须选择另一个表盘,然后重新选择我的,所以它完全停止了!
您链接的代码缺少一些重要的部分,这些部分是虚线的。 IE。你有没有定义更新率?
private static final long INTERACTIVE_UPDATE_RATE_MS = TimeUnit.SECONDS.toMillis(1);
完全实现效果很好。请参阅代码示例中的 AnalogWatchFaceService:Wearable/Watchface face.
支持 David 领导 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 开发人员文档中缺少的内容;具体来说,构建表盘服务的培训页面在其代码示例中不包含此祖先调用。
我正在使用 WatchFace API
(扩展 CanvasWatchFaceService
)为 Android Wear
开发一个表盘。
我已经使用 here 中的代码构建了一个代码 每秒 .
运行的代码我遇到了以下问题。服务时不时地因这个异常而崩溃。我不明白它是从哪里来的,如果你有任何线索,我会 post 额外的代码。
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)
在这次崩溃之后,表盘停止工作,要让它重新开始,我必须选择另一个表盘,然后重新选择我的,所以它完全停止了!
您链接的代码缺少一些重要的部分,这些部分是虚线的。 IE。你有没有定义更新率?
private static final long INTERACTIVE_UPDATE_RATE_MS = TimeUnit.SECONDS.toMillis(1);
完全实现效果很好。请参阅代码示例中的 AnalogWatchFaceService:Wearable/Watchface face.
支持 David 领导 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 开发人员文档中缺少的内容;具体来说,构建表盘服务的培训页面在其代码示例中不包含此祖先调用。