【问题标题】:Issue on Android 6.0.1 "Fatal Exception: android.view.WindowManager$BadTokenException"Android 6.0.1 上的问题“致命异常:android.view.WindowManager$BadTokenException”
【发布时间】:2016-10-31 10:46:05
【问题描述】:

我在我们的崩溃日志中看到此错误仅来自 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)

有人知道这个问题的原因/解决方案吗?它似乎很少发生。

【问题讨论】:

  • 有同样的问题。在三星 6.0.1 设备上发生 100%。我无法在我自己的带有 6.0.1 的三星设备上复制它。快把我逼疯。你找到任何解决方案了吗?也订阅这个:code.google.com/p/android/issues/detail?id=208906
  • 没有,还没弄明白。

标签: android android-6.0.1-marshmallow


【解决方案1】:

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

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

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

解决办法是正确处理新的ActionMode,并在关闭Activity之前关闭它。

【讨论】:

  • 太棒了!我无法重现这个错误,它让我发疯......谢谢!现在,当它显示在带有 WebView 的 Activity 上时,您能否详细说明如何处理这个问题?我没有以编程方式创建它,它会自动显示。
  • @miecio 在 webview 中覆盖 startActionMode(Callback callback, int type) ,并保存对 super.startActionMode(...) 结果的弱引用,以便您可以在需要时在 onPause 中完成它.
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2016-11-26
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多