欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);
        }