[英]Android Wear Watchface and the WakeLock
我正在使用WatchFace API
(擴展CanvasWatchFaceService
)為Android Wear
開發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)
這次崩潰之后,表盤停止工作,並且要使其重新開始,我必須選擇另一個表盤,然后重新選擇我的表盤,所以這是一個完全的顯示擋塊!
提議戴維(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開發人員文檔中缺少的內容; 具體來說,用於構建表盤服務的“培訓”頁面在其代碼示例中未包含此祖先調用。
您鏈接的代碼缺少一些重要的部分,這些部分被點綴。 即您是否定義了更新速率?
private static final long INTERACTIVE_UPDATE_RATE_MS = TimeUnit.SECONDS.toMillis(1);
完全實施后效果很好。 請參見代碼示例中的AnalogWatchFaceService:可穿戴/表面。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.