java.lang.IllegalStateException has already been added to the window manager问题的解决
程序员文章站
2022-04-15 18:45:19
...
近期,我在使用window manager的时候报出一个 bug 是讲我在使用这个window manager的时候添加了一个正在被使用的window manager。
log 如下:
Caused by:
java.lang.IllegalStateException:View android.widget.LinearLayout{83fcbb1 VFE...C..
........ 0,0-1024,600 #7f09019c app:id/fl_dismiss} has already been added to
the window manager.
android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:328)
android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
xiaoyastar.zeus.seraph.xiaoya.activity.shutdown.ShutdownDialog.setLayout(ShutdownDialog.java:108)
其实分析之后发现是在调用的时候没有将这个window manager remove掉,你可以在dismiss方法里面将remove方法加进去,注意最好使用 removeViewImmediate()方法,这是立即移除,而removeView是异步执行,这个可能会导致该window manager未及时移除。
又或者,你可以增加一个 Boolean值,在show这个window manager的方法里面将这个值设为 true ,在dismiss的时候将这个值设为false,然后当你在调用这个window manager的时候对这个Boolean进行一个判断,如果这个值是true那么就不再执行该调用方法
将这个值抽进这个方法中
public static boolean isSreenSaverShow() {
return isShowing;
}
调用的时候判断这个方法的返回值
if (!ShutdownDialog.isSreenSaverShow()){//只有是false的时候执行该调用方法
ShutdownDialog.getInstance().showLogoutDialog(mContext);
}