android.view.WindowManager$BadTokenException报错的原因
Posted LjRAndroid
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android.view.WindowManager$BadTokenException报错的原因相关的知识,希望对你有一定的参考价值。
android.view.WindowManager$BadTokenException
此文包含android.view.WindowManager$BadTokenException的4种情形:
Unable to add window --token null is not valid; is your activity running?
该异常多见于Popup Window组件的使用中抛出。
原因:
错误在PopupWindow.showAtLocation(mView, Gravity.BOTTOM,0,0)。 popwindow必须依附于某一个view,而在onCreate中view还没有加载完毕,必须要等activity的生命周期函数全部执行完毕,你需要依附的view加载好后才可以执行popwindow。
解决:
PopupWindow必须在某个事件中显示或者是开启一个新线程去调用,不能直接在onCreate方法中显示一个Popupwindow,否则永远会有以上的错误。
Unable to add window -- token android.os.BinderProxy@XXX is not valid; is your activity running?
该异常多见于dialog所要依附的View已经不存在导致的
原因:
由于将要弹出的dialog所要依附的View已经不存在导致的。当界面销毁后再弹出来;或者界面跳转时我们的view发生改变,dialog依附的context发生变化或者界面未运行。
解决:
判断界面是否存在然后再弹出了。
isFinishing():
判断当前activity是否被干掉了!
Unable to add window -- token null is not for an application ?
该异常常见于AlertDialog组件的使用中抛出。
原因:
new AlertDialog.Builder(mcontext)不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。
解决:
将new AlertDialog.Builder(Context context)中的参数用Activity.this或者getActivity()来填充就可以正确的创建一个Dialog了。
Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord @xxx is not valid; is your activity running?
该异常常见于new 对话框的时候抛出。
原因1:
dialog不能嵌套使用。
解决1:
处理完一个dialog再启动第二个。比如利用handler解决,当第一个dialog处理完逻辑后,发送handler消息,启动第二个dialog。
原因2:
因为new对话框的时候,参数context 指定成了this,即指向当前子Activity的context。但子Activity是动态创建的,不能保证一直存在。
解决2:
将context替换为getParent()即可。 注意:要创建dialog对象,上下文环境必须是activity,同时若ActivityGroup中嵌套ActivityGroup,嵌套多少就该使用多少个getParent()。(把AlertDialog里面的context:xxxActivity.this 改为::“xxxActivity.this..getParent()”就搞定!)
以上是关于android.view.WindowManager$BadTokenException报错的原因的主要内容,如果未能解决你的问题,请参考以下文章