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) { ... }

参考资料

  1. https://github.com/greenrobot/EventBus
  2. http://greenrobot.org/eventbus/documentation
  3. EventBus 3.0使用详解 https://www.jianshu.com/p/f9ae5691e1bb
01-08 06:31