EventBus簡介
阿新 • • 發佈:2020-08-07
EventBus簡介
1.EventBus簡介
Eventbus是一種用於Android的事件釋出-訂閱匯流排,它簡化了應用程式內各個元件之間進行通訊的複雜度,尤其是碎片之間進行通訊的問題,可以避免由於使用廣播通訊而帶來的諸多不便。
1.1 三個角色
- event:事件,它可以是任意型別,EventBus會根據事件型別進行全域性的通知
- Subscribe:事件訂閱者,在EventBus3.0之前必須定義以onEvent開頭的那幾個方法,分別是
onEvent
,onEventMainThread
,onEventBackgroundThread
,onEventAsync
,而在3.0之後事件處理的方法名可以隨意取,不過需要加上註解:@subscribe
POSTING
。 - publisher:事件的釋出者,可以在任意執行緒裡釋出事件。一般情況下,使用
EventBus.getDefault()
就可以得到一個EventBus物件,然後呼叫post(Object)
方法即可。
1.2 四種執行緒模式
EventBus3.0有四種執行緒模式,分別是:
- POSTING:預設,表示事件處理函式的執行緒跟釋出事件的執行緒在同一個執行緒。
- MAIN:表示事件處理函式的執行緒在主執行緒(UI)執行緒,因此在這裡不能進行耗時操作。
- BACKGROUND:表示事件處理函式的執行緒在後臺執行緒,因此不能進行UI操作,如果釋出事件的執行緒是主執行緒,那麼事件處理函式將會開啟一個後臺執行緒,如果釋出事件的執行緒是在後臺執行緒,那麼事件處理函式就使用該執行緒。
- ASYNC:表示無論事件釋出的執行緒是哪一個,事件處理函式始終會新建一個子執行緒執行,同樣不能進行UI操作。
2.EventBus使用
2.1 引入依賴
在使用之前先要引入如下依賴:
implementation 'org.greenrobot:eventbus:3.1.1'
2.2定義事件
引入依賴後定義一個事件的封裝物件。在程式內部就使用該物件作為通訊的資訊。
public class MessageWrap{ public final String message; public static MessageWrap getInstance(String message){ return new MessageWrap(message); } private MessageWrap(String message){ this.message = message; } }