token android.os.BinderProxy@163442e0 is not valid; is your activity running

最近项目中遇到这个异常,发生在dialog.show()的时候。

在第一次进入activity中显示正常,回退到前一个activity,再第二次进入该activity的时候就会崩溃,报错。

网上查了好多,也试过各种办法,都不能很好的解决,包括判断isFinishing,置空等,但是基本能断定问题发生在activity上

然后打印log,在activity的oncreate、onresume和调用dialog.show()的方法中都打印isFinishing()状态,发现结果不一样,而这个是不应该的

oncreate和onresume中是没有问题的,那问题就应该出在调用dialog.show()的那个方法(就叫方法A吧)中了。

仔细看代码,发现方法A是一个监听回调,跟oncreate相比属于外来户,然后跟踪到这个监听中,发现初始化监听的时候需要传递一个activity,就是dialog显示需要依附的activity,

由于代码不合理,导致每次进入activity需要显示dialog的时候,监听中拿到的activity都是第一次创建的实例,所以第一次能成功,此后都报这个错。

改正的方法就是在监听中添加让activity置空的方法,并在activity销毁的时候调用,这样每次初始化传入的都是当前的activity,问题解决。

还会出现一些别的现象,比如在这个监听方法中设置图像或者文字,明明执行了语句,控件也不为空,但是就是无效,

                                    比如莫名其妙的空指针等。


从根源上解决了以后,提到的各种毛病就都没有了。

因此这个异常的根源大概就是:显示时控件拿到的activity 与 当前的activity 不一致。


你可能感兴趣的:(token android.os.BinderProxy@163442e0 is not valid; is your activity running)