今天组内的小伙伴,碰到了一个Android异常,当时正好也是闲着,帮忙看了下。
android.view.WindowManager$BadTokenException:
Unable to add window -- token android.os.BinderProxy
@443b7270 is not valid; is your activity running
第一眼看到这个,我就说,你那边是不是有个activity,要用的时候被异常关闭了吧。
然后顺着这条思路走下去,发现Activity根本没有关闭。所以这条路放弃了。
坐下来研究了一下:这是一个tab主页面,内部加载了几个tab子页面。而他的需求是在某个tab子页面中,接收到了某种广播,然后弹一个
dialog出来,简单的需求,但是始终是报错
。
跟了下代码发现,那个tab子页面会根据内容动态变更view。所以这边弹出dialog的地方不能放在这里。
new CommonAlertDialog(xxx.this, xxx, xxx).show();
因为view 改变之后 这个xxx.this 就不是原来的xxx.this了,所以最佳的做法还是放在tab主页面里边弹dialog,父tab的context是不会变的。
另外tab这种东西已经淘汰了。
偶尔碰到,希望改别人老代码bug的小伙伴不要碰到这种坑了。
解决Android Dialog弹窗异常
本文介绍了一种在Android开发中遇到的Dialog弹窗导致的BadTokenException异常情况及其解决方案。异常出现在Tab页面中动态创建并显示Dialog时,原因是Tab页面的Context在视图更改后不再有效。最终通过将Dialog的创建和显示转移到Tab主页面来解决问题。
1万+

被折叠的 条评论
为什么被折叠?



