android eventbus fragment,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中去注销。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值