android.view.WindowManager$BadTokenException报错的原因

Posted LjRAndroid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android.view.WindowManager$BadTokenException报错的原因相关的知识,希望对你有一定的参考价值。





android.view.WindowManager$BadTokenException报错的原因

android.view.WindowManager$BadTokenException


此文包含android.view.WindowManager$BadTokenException的4种情形:

android.view.WindowManager$BadTokenException报错的原因

Unable to add window --token null is not valid; is your activity running?

该异常多见于Popup Window组件的使用中抛出。

android.view.WindowManager$BadTokenException报错的原因

原因:

      错误在PopupWindow.showAtLocation(mView, Gravity.BOTTOM,0,0)。 popwindow必须依附于某一个view,而在onCreate中view还没有加载完毕,必须要等activity的生命周期函数全部执行完毕,你需要依附的view加载好后才可以执行popwindow。


解决:

    PopupWindow必须在某个事件中显示或者是开启一个新线程去调用,不能直接在onCreate方法中显示一个Popupwindow,否则永远会有以上的错误。

android.view.WindowManager$BadTokenException报错的原因



android.view.WindowManager$BadTokenException报错的原因

Unable to add window -- token android.os.BinderProxy@XXX is not valid; is your activity running?

该异常多见于dialog所要依附的View已经不存在导致的

android.view.WindowManager$BadTokenException报错的原因

原因:

        由于将要弹出的dialog所要依附的View已经不存在导致的。当界面销毁后再弹出来;或者界面跳转时我们的view发生改变,dialog依附的context发生变化或者界面未运行。


解决:

        判断界面是否存在然后再弹出了。

android.view.WindowManager$BadTokenException报错的原因

isFinishing():

 判断当前activity是否被干掉了!


android.view.WindowManager$BadTokenException报错的原因
Unable to add window -- token null is not for an application ?
该异常常见于AlertDialog组件的使用中抛出。
android.view.WindowManager$BadTokenException报错的原因
android.view.WindowManager$BadTokenException报错的原因

原因:

       new AlertDialog.Builder(mcontext)不能使用getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。


解决:

    将new AlertDialog.Builder(Context context)中的参数用Activity.this或者getActivity()来填充就可以正确的创建一个Dialog了。

    

android.view.WindowManager$BadTokenException报错的原因
Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord @xxx is not valid; is your activity running?

android.view.WindowManager$BadTokenException报错的原因

该异常常见于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()”就搞定!)

LjRAndroid









以上是关于android.view.WindowManager$BadTokenException报错的原因的主要内容,如果未能解决你的问题,请参考以下文章