窗口异常 android.view.WindowManager$BadTokenException

昨天测试时发现这个BUG,当时我也很好奇这个问题是,怎样产生的。我打开错误日志看见是这样提示的。

android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@2cd9157b is not valid; is your activity running?
    at android.view.ViewRootImpl.setView(ViewRootImpl.java:676)
    at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:288)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
    at android.app.Dialog.show(Dialog.java:312)
    at com.mx.study.view.Loading$1.handleMessage(Loading.java:63)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:145)
    at android.app.ActivityThread.main(ActivityThread.java:5835)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

这也是我第一次遇见这个异常,我感觉很诡异,有时会出现,有时又不出现。这个就有点蛋痛了。查询了资料。

异常的大概意思 :android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null是无效的; 为您的活动运行?

1.这里主要说的是你的android里一个Activity发生窗体泄漏了,也就是我们常说的内存泄漏,为什么窗体会泄漏,

主要是你的打开一个PopupWindow(窗体)时,如图。它没有关闭PopupWindow(窗体),就退出这个Activity,就会发生这个错误,

因为这里就有一个顺序,你要先关闭PopupWindow,再关闭Activity,这个一定的,PopupWindow(窗体)不能独立存在。

2.明白这个,你就容易解决了,你先用(dismiss)关闭就行,在你的窗体需要关闭时,加上这句:

(PopupWindow.dismiss;)PopupWindow这个是你项目里你窗体的名字。最好做一个判断,判断窗体是否为空,如果不为空就关闭,不然有时空也关闭也会出错。

大概出现的情景是这样的:我上一个Activity里面滑动的时候突然,闪了一下。我知道这个肯定出现BUG,但是当前界面的Activity并没用到,WindowManager 和弹窗。我想是不是我之前没有关闭上一个Activity的弹窗。

于是我在代码中是这样写的。

 if(chaptersWindow!=null){
      chaptersWindow.dismiss();
 }
 if(popupWindowSelect!=null){
     popupWindowSelect.dismiss();
 }
 finish();
最后就没有出现这个异常,第一次遇见这个异常,记一下是怎样解决的。希望对大家有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值