Android BroadCastReceiver突然失效接收不到广播了

今天遇到了一个很奇怪的问题,之前做的一个功能通过广播接收器通知更新父fragment 中的ui,一直都是正常的,后来突然发现在三星和小米手机上没有反应了,但华为手机正常,很奇怪,相同的代码,后来看log发现在小米手机上面广播可以发出,但接收器收不到,后来发现是因为静态注册的原因,改成动态注册就可以了所有机型,很奇怪的问题(其实之前是动态注册的,但后来总是偶尔报错提示我在fragment销毁的生命周期里面解除动态注册的接收器并没有注册,但明明注册了,所以干脆改成了静态注册,上线几周都没有问题,结果莫名奇妙的出现了这个尴尬的现象,改回动态竟然解决了)。有可能是因为动态广播接收器的优先级比静态的要高吧,然后动态注册的reciver或者服务server都需要在销毁的生命周期ondestory中做解除注册的操作,这里容易出现一个service或者recevier not regeist的异常,造成这样的原因是当前进行注册和解除注册的activity的启动模式不是singtask的,所以有时候启动的时候点击按钮多了,启动了两个实例,当退出第一个时还需要退出第二个,这个时候就会出现这个异常,解决方案是将activity的启动模式lauchmode改为singTask就可以了,特此记录作为采坑经验。

发布了89 篇原创文章 · 获赞 231 · 访问量 62万+

猜你喜欢

转载自blog.csdn.net/wjj1996825/article/details/85140246