1、EventBus事件接收不到的几种情况
a、没有调用EventBus的注册方法(register)
b、使用的是普通的订阅事件,而在注册订阅消息之前就发送了消息(解决可以参考第3个问题)
c、接收方法中的参数与发送的不一致,导致EventBus判断没有对应的注册者
d、发送的是粘性事件,并且是同一类型的粘性事件(通过源码可以发现:粘性事件会加入一个叫stickyEvents的Map集合中,该集合使用event.getClass作为key,event作为value,因此当出现同一类的粘性事件时,会将之前的粘性事件给替换掉。)
e.使用的是粘性事件,可是在订阅事件处理函数上未加 sticky = true
2、事件post了一次,事件处理却执行了多次?
出现这个问题的原因一般是EventBus被注册了多次,无论是在Activity,Fragment,Dialog类中,都要进行事件的销毁解绑处理。
3、如何实现在EventBus注册之前,发送事件也能接收到事件?
在发送事件的时候使用Eventbus.getDefault().postSticky(),就可以不用关心注册事件是否已经注册;或者注册前后的问题,如果发送粘性事件之前没有注册事件,事件注册完成就会收到之前发送的粘性事件;
网友评论