PopuoWindow弹出时报BadTokenException的解决方案
来源:互联网 发布:itunes网络连接超时 编辑:程序博客网 时间:2024/05/14 10:03
完整的错误是
java.lang.RuntimeException: Unable to resume activity {*****}: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2797) ...Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? at android.view.ViewRootImpl.setView(ViewRootImpl.java:559)
关键的是
BadTokenException: Unable to add window -- token null is not valid; is your activity running?
总之…问题有两种可能性:你的Activity实例不在了,你依附的View不存在了。我遇到的是第二种情况,下面详细描述一下问题场景以及解决方案。
问题描述
在某个场景,需要跳转到某个页面后立即弹出一个PopupWindow,所以第一个反应就是在onCreate
中判断跳转,然后执行showAtLoaction..然后报错,当然我的第一反应就是View并没有加载好久执行操作了,于是将这个方法放到了onResume
、onPostResume
中..然而并没有用。
StackOverFlow中给出的解释是:
To avoid BadTokenException, you need to defer showing the popup until after all the lifecycle methods are called (-> activity window is displayed):
只是解决问题的话…这个方法是不能在Activity的生命周期方法中调用的..所以需要在所有的生命周期方法执行后才可以调用。具体的解决方案是:写一个方法:
findViewById(R.id.main_page_layout).post(new Runnable() { public void run() { pw.showAtLocation(findViewById(R.id.main_page_layout), Gravity.CENTER, 0, 0); }});
这个方法会在所有的生命周期方法调用后才执行,这样就能安全地调用PopupWindow了。
另外还有一个方法是在onWindowFocusChanged
中调用,但是这样…总感觉有点取巧。
一点反思
面向百度,面向谷歌和面向StackOverflow编程总是好的,不过有时间应该看下WindowManager以及Activity的加载机制,是如何绘制界面和事件触发的。
0 0
- PopuoWindow弹出时报BadTokenException的解决方案
- Android实现浮窗时报的android.view.WindowManager$BadTokenException: Unable to add window异常
- Android的BadTokenException
- 安装Eplan时报错的解决方案
- eclipse在启动时报错的解决方案
- oracle导入dmp时报错的解决方案
- BadTokenException
- BadTokenException
- PopupWindow的BadTokenException处理方法
- 运行VS6.0 Setup时报错的解决方案
- eval进行json字符串转换时报缺少缺少“;”的解决方案
- springmvc+mybatis+c3p0 tomcat启动时报的错误,求解决方案
- MySQL创建Function时报错误码1418的解决方案
- 非图像界面服务器执行demo时报错的解决方案
- IMP导入数据库时报缓冲区长度不够的解决方案
- 导入paramiko库时报 UnicodeDecodeError 错误的解决方案
- 关于 Eclipse3.2 弹出内存不足的解决方案
- chrome偶尔弹出新窗口的解决方案
- LeeCode-String to Integer (atoi)
- BZOJ 2304: [Apio2011]寻路
- 海量数据处理面试题
- windows核心编程之服务(services)、函数(functions) 、例程(routines)
- 【收藏用】--切勿转载JAVA 使用Dom4j 解析XML
- PopuoWindow弹出时报BadTokenException的解决方案
- JavaScript基础篇(四)— — 函数
- Masonry之初体验
- DES加密算法
- hdoj1012
- undefined reference to 'socket@12'编译socket出错codeblocks
- 红黑树
- UIViewController之间的传值 6种
- ConcurrentHashMap原理分析