EventBus
是一種用於Android的事件發佈-訂閱總線。
- 事件:普通的Java對象,可以攜帶數據。
- 訂閱:在訂閱方訂閱。
- 發佈:在發佈方將事件發佈出來。
註冊
在訂閱方進行註冊,一般在onStart方法進行註冊。
EventBus.getDafault().register(this);
取消註冊
在訂閱方取消註冊,一般在onStop方法
EventBus.getDefault().unregister(this);
事件回調函數
在訂閱方
- 必須要添加註解 @Subscribe
- 方法必須爲 public void
例:
@Subscribe
public void 方法名(事件類 事件引用){
}
事件的發佈
在發佈方進行。
EventBus.getDefault().post(事件對象);
EventBus–ThreadMode
控制回調函數運行在那個線程。
- POSTING:在哪一個線程發佈,回調函數就在哪個線程執行。
- MAIN:回調函數一定在主線程執行
- MAIN-ORDERED:回調函數在主線程執行,但與MAIN不同的是:在MAIN模式下,發佈方是會被訂閱方堵塞的(假如回調是一個耗時操作,則後續指令須在此回調執行完畢後才能處理),而在MAIN-ORDERED模式下,後續指令會立即執行。
- BACKGROUNG:若發佈方在子線程發佈,則回調函數也在其線程執行,若發佈方在主線程發佈,則回調函數會在子線程進行。
- ASYNC:回調函數會在另外一個獨立的新開的線程中執行,異步,不會造成阻塞
模式的設置方法
修改回調函數的註解
@Subscribe(threadMode = ThreadMode.POSTING)
粘性事件
通常我們都是先訂閱,後發佈,而粘性事件就是先發布,後訂閱。
回調方法
註解
@Subscribe(sticky = true)
發佈方
EventBus.getDefault().postSticky(事件對象);