Проблема на Android 6.0.1 "Неустранимое исключение: android.view.WindowManager$BadTokenException"

Я вижу эту ошибку в нашем журнале сбоев, поступающем только с устройств Android 6.0.1, но не зависящем от конкретного устройства.

Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
       at android.view.ViewRootImpl.setView(ViewRootImpl.java:849)
       at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:337)
       at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
       at android.widget.PopupWindow.invokePopup(PopupWindow.java:1329)
       at android.widget.PopupWindow.showAtLocation(PopupWindow.java:1077)
       at android.widget.PopupWindow.showAtLocation(PopupWindow.java:1035)
       at com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup.show(FloatingToolbar.java:563)
       at com.android.internal.widget.FloatingToolbar.show(FloatingToolbar.java:214)
       at com.android.internal.view.FloatingActionMode$FloatingToolbarVisibilityHelper.updateToolbarVisibility(FloatingActionMode.java:411)
       at com.android.internal.view.FloatingActionMode$1.run(FloatingActionMode.java:65)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:158)
       at android.app.ActivityThread.main(ActivityThread.java:7229)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

Кто-нибудь знает причину / решение этой проблемы? Кажется, это происходит относительно редко.

2 ответа

Решение

Такая же проблема есть только на устройствах Samsung с Android 6.0.1 и выше. Будучи в состоянии воспроизвести это.

Проблема в новом режиме плавающего действия (плавающая панель инструментов)

Это происходит, когда пользователь выбирает какой-то текст на экране (появилась плавающая панель инструментов), переходит к предыдущему действию (закрывает текущее действие), а затем, насколько я понял, android OS пытается воссоздать его (потому что это не было должным образом закрыт) с использованием объекта деятельности, который был уничтожен.

Решение состоит в том, чтобы правильно обработать новый ActionMode и закрыть его перед закрытием действия.

Вызов webview.onPause из действий onPause и webview.onResume() из действий onResume также, похоже, решает эту проблему.

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