1

Я разрабатываю часы для Android Wear с использованием WatchFace API (удлинение CanvasWatchFaceService).Android Wear Watchface и WakeLock

Я использовал код от here, чтобы создать тикер, который запускает код каждую секунду.

У меня возникла следующая проблема. Время от времени служба аварийно завершает это исключение. Я не могу понять, откуда оно взялось, если у вас есть какие-либо выводы, я добавлю дополнительный код.

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) 

После авиакатастрофы циферблат перестает работать и сделать его снова начать я должен выбрать другой циферблат, а затем повторно мой, так что в общей сложности шоу пробки!

+0

Вы вызываете метод 'gets()' в 'WatchFaceService'? –

+0

Не могли бы вы высказать свой код? Где-то вы вызывали метод 'приобретать()' объекта WakeLock, который не инициализирован. На сайте, на который вы ссылаетесь, такого не происходит. – Bobby

+0

Ни в моем коде, я также никогда не использую объект WakeLock. Я использую ObjectAnimator, может ли это быть причиной? –

ответ

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; в частности, на странице «Обучение» для создания службы «Face Face» этот запрос предка не включается в его образец кода.

+1

Я отправил запрос на получение документации https://developer.android.com/training/wearables/watch-faces/service.html#CallbackMethods изменен. Спасибо за ответ! –

+0

Я выкопал код образца часового образца, как предлагают документы. Именно тогда я понял, что мне тоже не хватает звонков в супер. – worked

0

Код, который вы связываете, не содержит некоторых важных частей, которые пунктирны. То есть вы указали скорость обновления?

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

Полностью реализованный он хорошо работает. См. AnalogWatchFaceService в примерах кода: Wearable/Watchface.

+0

Я уже добавил эту строку в частности. Мне не хватало супер. по переопределенным методам. Я тестирую его прямо сейчас. –

Смежные вопросы