Android EventBus接收不到事件(EventBus在Activity与fragment中注册注销位置)

       碰到了EventBus发送的事件接收不到的情况,调试后发现是已经被注销的问题。

       首先注册和注销应该在向Activity生命周期中相对应的位置,因为Activity生命周期就是相对应的调用的,如onCreate和onDestory,onStart和onStop,onResume和onPause,如果调用到了onStop,下次出现就会从onStart开始。所以在注册后要在其相对的生命周期进行注销。

        不建议在onResume中,因为onResume出现的频率大,所以要重复调用(针对重复调用的情况,调用注册前一定判断还未注册再去注册,不管在哪个生命周期都会更稳妥一点)。而且有时候Activity被异常回收,没有调用onPause方法,这样会导致EventBus没有注销。

    @Override
protected void onStart() {
super.onStart();
if(!EventBus.getDefault().isRegistered(this)){
//注册
EventBus.getDefault().register(this);
}
}

@Override
protected void onStop() {
super.onStop();
if (EventBus.getDefault().isRegistered(this)){
//注销
EventBus.getDefault().unregister(this);
}
}

            官方推荐的是在onStart中注册,在onStop注销,说明这样做更好,在Activity中这样做目前还没遇到问题,因为从一个Activity中跳转到另一个Activity中前一个Activity会调用到onPause,并不会调用onStop,所以不会被注销,EventBus依然可以正常接收。

            但是今天放在fragment中的时候出现接收不到问题,并不是Activity异常回收,而是必现情况,是在Fragment+ViewPager的主页面应用场景下,在主页面的某一Fragment中onStart中注册EventBus,在onStop注销。在Fragment中跳转到另一个Activity中。这时候主页面的Activity会onStop,所以里面的Fragment也都会onStop,所以EventBus被注销了,也就接收不到事件了。

           像这种跳转后会onStop的情况就是在onCreate中去注册,在onDestory中去注销。

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

Android EventBus接收不到事件(EventBus在Activity与fragment中注册注销位置)

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » Android EventBus接收不到事件(EventBus在Activity与fragment中注册注销位置)
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏