适用版本:3.1.1git
EventBus是一个高效的轻量级事件总线,适合用于Android和Java应用。github
在Gradle配置中加入:ide
compile 'org.greenrobot:eventbus:3.1.1'
任意一个类均可以做为事件:函数
public static class MessageEvent { ... }
事件处理方法须要使用注解@Subscribe描述。事件处理方法的入参是事件对象,返回值是void:post
@Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { ... }
拥有事件处理方法的类必须进行注册。对于Android的Activity类,一般在onCreate()方法中注册:this
@Override protected void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); setContentView(R.layout.activity_main); EventBus.getDefault().register(this); }
EventBus.getDefault().post(new MessageEvent());
若是再也不须要接收事件,须要从EventBus注销注册。一般在Activity.onDestroy()中进行:spa
@Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }
EventBus的模型很是简单,只有3种对象:事件(event)、订阅者(subscriber)和发布者(publisher)。发布者发布事件,订阅者接收事件。在EventBus中,任意对象均可以做为事件。线程
在事件发布后,EventBus寻找到对应的订阅者,调用事件处理方法。有些事件须要更新UI,有些事件须要在后台长时间运行。不一样的事件不能在同一个线程中处理,所以EventBus提供了线程模式,由订阅者决定使用哪一种模式运行。在3.1.1版本中,一共有5种线程模式,分别是:对象
POSTING是默认的线程模式。在此模式下,事件处理方法在发送事件的线程中调用。事件
MAIN模式用于调用UI更新操做。此模式下,事件处理方法应当尽快返回。
MAIN_ORDERED和MAIN模式相似,区别是后续事件必须等待前驱事件处理完毕才会被分发。
BACKGROUND 在此模式下,若是事件由主线程投递,EventBus会使用一个后台线程调用事件处理方法。若是事件由非主线程投递,会在投递线程中调用处理方法。
ASYNC 在此模式下,EventBus会从本身维护的线程池中选择一个线程处理事件。事件不会在主线程或投递线程中处理。
每一个事件处理函数能够由不一样的线程模式。线程模式经过@Subscriber注解的参数设置:
@Subscriber(threadMode=ThreadMode.MAIN_ORDERED) public void onMessage(SomeEvent e) { ... }