1、EventBus三要素
Event:事件。可以是任意类型的对象
Subscriber:事件订阅者。在EventBus3.0之前消息吹了的方法只能限定于onEvent,onEventMainThread,onEventBackgroundThread,和onEventAsync,它们分别代表4种线程模型。而在3.0之后,事件处理的方法可以随便取名,但是需要添加一个注解@Subscribe,并且要指定线程模型(默认是Posting)
publisher:事件发布者。可以在任意线程任意位置发布事件,直接调用EventBus到的post方法,根据post函数参数的类型,会自动调用订阅相应类型事件的函数。
2、EventBus的4种线程模型
POSTING: 该事件在哪个线程发布出来,事件处理函数就在哪个线程运行
MAIN:该事件无论在哪个线程发布出来,事件处理函数都会在主线程中执行,所以时间处理的时间不能太长,长了会导致ANR.
BACKGROUND:如果时间在UI线程中发布出来,那么该事件处理函数就会在新的线程中运行;如果事件本来就是在子线程中发布,那么该事件处理函数直接在发布事件的线程中执行。
ASYNC:无论该事件在哪个线程发布,该事件处理函数都会在新建的子线程中运行。
3、使用
// 自定义事件类
public class MessageEvent {}// 注册
EventBus.getDefault().register(this);
// 发送事件
EventBus.getDefault().post(messageEvent);
// 处理事件
@Subscribe (threadMode = ThreadMode.Main,sticky = false, priority = 0)
public void XXX(MessageEvent messageEvent) {}
【EventBus基础用法】4、普通事件:先订阅再发布
黏性事件:先发布再订阅