碰到了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中注册,在