EventBus筆記

EventBus筆記

適用版本: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模型

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

參考資料

  1. https://github.com/greenrobot/EventBus
  2. http://greenrobot.org/eventbus/documentation
  3. EventBus 3.0使用詳解 https://www.jianshu.com/p/f9ae5691e1bb
相關文章
相關標籤/搜索