阿里云消息队列+dialog 那些坑
最近公司开会决定,app中的消息传递废弃CS架构,改用消息队列, 额 ,一脸懵逼,话不多说,说一下坑吧
,因为额,项目经理喜欢弹框的样式,就自己定义了一个弹框样子差不多是这样。
额 ,假装有一张图 .....
这个界面要接受消息队列,然后自动给用户弹出来dialog,显示有商家回复你的订单,开始测试的时候没有问题,但是如果用户频繁的取消订单,再下单,就会出现以下问题
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@406ab4c8 is not valid; is your activity running?
what?,is your activity running?,这个是当前的activity,怎么回报这个错误。查了一下资料。
dialog是需要依附于activity存在的,当activity销毁的时候,如果执行dialog.show 就会以下,
于是代码改成了
if(!Activity.this.isFinishing()) {
dialog.show
}else{
Log.d("flag","===========Activity.this.isFinishing()");
}
发现不报错了,但是,有的时候会直接走else,activity显示销毁状态,
检查了以下代码,在onDestory()方法执行的时候,检查了dialog是不是显示,如果显示,让他隐藏,是不是为空,如果不为空,则制空,这些都判断了,最后查阅资料显示,窗体泄露主要是当前的activity,要接收消息队列,不能完全销毁,虽然activity跟windows分离,但是不会完全销毁。
最后的解决办法是,在其他的activity接收消息队列,通过EnvetBus Post到这个显示dialog的页面。进行显示doalog。