Android 6.0.1 "Fatal Exception: android.view.WindowManager$BadTokenException" 上的问题

Issue on Android 6.0.1 "Fatal Exception: 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.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)

有人知道这个问题的 cause/solution 吗?好像比较少见。

仅在 Android 6.0.1 及更高版本的三星设备上存在同样的问题。能够重现它。

问题出在 new floating action mode (floating toolbar)

当用户在屏幕上选择一些文本(出现浮动工具栏),转到上一个 activity(关闭当前 activity),然后据我了解, android OS 正在尝试使用已被销毁的 activity 的对象重新创建它(因为它没有正确关闭)。

解决方法是正确处理新的 ActionMode 并在关闭 activity 之前关闭它。

从活动 onPause 调用 webview.onPause 和 webview.onResume() 来自活动 onResume 似乎也 解决这个问题。