EventBus笔记
适用版本:3.1.1
简介
EventBus是一个高效的轻量级事件总线,适合用于Android和Java应用。
安装
在Gradle配置中加入:
compile 'org.greenrobot:eventbus:3.1.1'
使用
定义事件
任意一个类都可以作为事件:
public static class MessageEvent { ... }
编写事件处理方法
事件处理方法需要使用注解@Subscribe描述。事件处理方法的入参是事件对象,返回值是void:
@Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { ... }
注册
拥有事件处理方法的类必须进行注册。对于Android的Activity类,通常在onCreate()方法中注册:
@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()中进行:
@Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }
EventBus模型
EventBus的模型非常简单,只有3种对象:事件(event)、订阅者(subscriber)和发布者(publisher)。发布者发布事件,订阅者接收事件。在EventBus中,任意对象都可以作为事件。
在事件发布后,EventBus寻找到对应的订阅者,调用事件处理方法。有些事件需要更新UI,有些事件需要在后台长时间运行。不同的事件不能在同一个线程中处理,因此EventBus提供了线程模式,由订阅者决定使用哪种模式运行。在3.1.1版本中,一共有5种线程模式,分别是:
每个事件处理函数可以由不同的线程模式。线程模式通过@Subscriber注解的参数设置:
@Subscriber(threadMode=ThreadMode.MAIN_ORDERED) public void onMessage(SomeEvent e) { ... }