Caused by:
| |
5
java.lang.IllegalArgumentException:View=DecorView@c15a23c[] not attached to window manager
| |
6
android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:511)
| |
7
android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:413)
| |
8
android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:168)
| |
9
android.app.Dialog.dismissDialog(Dialog.java:477)
| |
10
android.app.Dialog.dismiss(Dialog.java:460)
测试到一个bug
该异常表示view没有添加到窗口管理器,通常是我们dismiss对话框的时候,activity已经不存在了,建议不要在非UI线程操作对话框。
[解决方案]:常发生这类Exception的情形都是,有一个费时的线程操作,需要显示一个Dialog,在任务开始的时候显示一个对话框,然后当任务完成了在Dismiss对话框,如果在此期间如果Activity因为某种原因被杀掉且又重新启动了,那么当dialog调用dismiss的时候WindowManager检查发现Dialog所属的Activity已经不存在,所以会报错。 要避免此类Exception,就要正确的使用对话框,也要正确的使用线程: 1.不要在非UI线程中使用对话框创建,显示和取消对话框; 2.尽量少用单独线程,出发是真正的耗时操作采用线程,线程也不要直接用Java式的匿名线程,除非是那种单纯的操作,操作完成不需要做其他事情的。 3.如果是在fragment中发起异步网络的回调中进行dialog的操作,那么在操作之前,需要判断 isAdd( ),避免fragment被回收了但是还要求dialog去dismiss 4.在Activity onDestroy中对Dialog提前进行关闭 1、直接try catch,将崩溃阻止
|
not attached to window manager
最新推荐文章于 2022-05-16 10:39:10 发布