1. 程式人生 > 實用技巧 >EventBus簡介

EventBus簡介

EventBus簡介

1.EventBus簡介

Eventbus是一種用於Android的事件釋出-訂閱匯流排,它簡化了應用程式內各個元件之間進行通訊的複雜度,尤其是碎片之間進行通訊的問題,可以避免由於使用廣播通訊而帶來的諸多不便。

1.1 三個角色

  1. event:事件,它可以是任意型別,EventBus會根據事件型別進行全域性的通知
  2. Subscribe:事件訂閱者,在EventBus3.0之前必須定義以onEvent開頭的那幾個方法,分別是onEventonEventMainThreadonEventBackgroundThreadonEventAsync,而在3.0之後事件處理的方法名可以隨意取,不過需要加上註解:@subscribe
    ,並且指定執行緒模型,預設為POSTING
  3. publisher:事件的釋出者,可以在任意執行緒裡釋出事件。一般情況下,使用EventBus.getDefault()就可以得到一個EventBus物件,然後呼叫post(Object)方法即可。

1.2 四種執行緒模式

EventBus3.0有四種執行緒模式,分別是:

  1. POSTING:預設,表示事件處理函式的執行緒跟釋出事件的執行緒在同一個執行緒。
  2. MAIN:表示事件處理函式的執行緒在主執行緒(UI)執行緒,因此在這裡不能進行耗時操作。
  3. BACKGROUND:表示事件處理函式的執行緒在後臺執行緒,因此不能進行UI操作,如果釋出事件的執行緒是主執行緒,那麼事件處理函式將會開啟一個後臺執行緒,如果釋出事件的執行緒是在後臺執行緒,那麼事件處理函式就使用該執行緒。
  4. 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;
    }
}