首页 > 解决方案 > ActivityThread.handleDestroyActivity 中的“DecorView 未附加到窗口管理器”问题

问题描述

最近我收到了来自 Crashlytics 的一些错误,似乎在 Activity 销毁时抛出了 IllegalArgumentException:

Fatal Exception: java.lang.IllegalArgumentException: View=DecorView@8149dd0[] not attached to window manager
       at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:552)
       at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:433)
       at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:131)
       at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4645)
       at android.app.ActivityThread.-wrap5(ActivityThread.java)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1757)
       at android.os.Handler.dispatchMessage(Handler.java:105)
       at android.os.Looper.loop(Looper.java:164)
       at android.app.ActivityThread.main(ActivityThread.java:6944)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)

我在使用 AsyncTask 和 ProgressDialog 时做了一些保护,但这看起来不像是dismiss() 问题。

近 80% 是在 Android API 8.x 中抛出的

有谁知道如何解决这个问题?

标签: android

解决方案


这可能是 NightMode 的问题,我确实知道究竟是什么原因造成的,但是当我使用时:

AppCompatDelegate.setDefaultNightMode(night ?
    .MODE_NIGHT_YES :
    .MODE_NIGHT_NO);

替换原来的:

getDelegate().setLocalNightMode(night ?
    .MODE_NIGHT_YES :
    .MODE_NIGHT_NO);

崩溃就消失了。

我知道这可能不是一个好的答案,但如果有一天你遇到同样的问题,这可能会给你一些提示。


推荐阅读