適用版本: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) { ... }