Последнее обновление (9 февраля 2022 г.) от Samsung для Galaxy Watch4 приводит к сбою циферблата — что делать?

Вчера Samsung опубликовала обновление для Galaxy Watch4. С тех пор меня завалили электронные письма пользователей, в которых говорилось, что мой циферблат дает сбой и непригоден для использования. Сбой происходит, когда часы переключаются между обычным режимом и режимом окружающей среды.

Согласно некоторым статьям, опубликованным сегодня (https://www.xda-developers.com/galaxy-watch-4-update-breaking-watch-faces ), WatchFaceService.Engine больше не поддерживается или не работает в новом обновлении.

Что сбивает с толку, так это то, что, хотя мой циферблат выходит из строя, другие циферблаты просто не обновляются в фоновом режиме, потому что, по-видимому, onTimeTick() не вызывается. Но я до сих пор не могу понять, как избежать аварии . В отладочной информации указано только «java.lang.RuntimeException: eglCreateWindowSurface failed», но не указана ни одна строка в моем коде:

      2022-02-11 11:21:55.612 4652-4652/com.xxxx.mywatchface E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.xxxx.mywatchface, PID: 4652
java.lang.RuntimeException: eglCreateWindowSurface failed
    at android.support.wearable.watchface.Gles2WatchFaceService$Engine.createWindowSurface(Gles2WatchFaceService.java:202)
    at android.support.wearable.watchface.Gles2WatchFaceService$Engine.onSurfaceChanged(Gles2WatchFaceService.java:300)
    at android.service.wallpaper.WallpaperService$Engine.updateSurface(WallpaperService.java:1082)
    at android.service.wallpaper.WallpaperService$Engine.reportVisibility(WallpaperService.java:1296)
    at android.service.wallpaper.WallpaperService$Engine$3.onDisplayChanged(WallpaperService.java:1439)
    at android.hardware.display.DisplayManagerGlobal$DisplayListenerDelegate.handleMessage(DisplayManagerGlobal.java:767)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:246)
    at android.app.ActivityThread.main(ActivityThread.java:7690)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)

Кто-нибудь знает об этом больше? Если WatchFaceService больше не будет поддерживаться, какая ему альтернатива?

1 ответ

Это сломанный выпуск обновления прошивки от Samsung.
Я провел несколько тестов по этому вопросу.
Мой вывод состоит в том, что они «заблокировали» на уровне прошивки запрос блокировки ЦП - теперь процесс, который запрашивает блокировку ЦП, игнорируется.
я не знаком с onTimeTick()метод API циферблата часов, но я предполагаю, что он запрашивает блокировку процессора для обновления графического интерфейса.
Согласно документации , именно так процесс требует блокировки ЦП, и теперь, после этого обновления, эти строки кода игнорируются :

Код Котлина:

      val pm = getSystemService(POWER_SERVICE) as PowerManager
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "awake")
wl.acquire(
    MainActivityModel.convertDegreesToMilliseconds(rotationValue)
        .toLong()
)

Возможно, вы можете найти дополнительную информацию или обновление об исправлении здесь:

https://forum.developer.samsung.com/c/watch-face-studio/49

Другие вопросы по тегам