1. 程式人生 > >EventBus事件總線框架(發布者/訂閱者模式,觀察者模式)

EventBus事件總線框架(發布者/訂閱者模式,觀察者模式)

編譯 exe 組件間通信 之間 對象 int instance vol 高效率

一、 android應用內消息傳遞的方式:
1. handler方式-----------------不同線程間傳遞消息。
2. Interface接口回調方式-------任意兩個對象。
3. Intent進行組件間通信,廣播方式。


二、單例比較好的寫法:
private static volatile EventBus defaultInstance;
構造函數應當是private,不應該是public

 1 public static EventBus getDefault() {
 2   if (defaultInstance == null) {
 3     synchronized
(EventBus.class) { 4       if (defaultInstance == null) { 5         defaultInstance = new EventBus(); 6       } 7     } 8   } 9   return defaultInstance; 10 }


雙重檢查鎖(DCL)的方式,防止並發的問題,還能極大的提高效率。

三、EventBus3.0以前
1. 采用發布者/訂閱者模式(觀察者模式)設計的簡化Activity、Fragment、Service、threads等之間通信的一種事件框架機制,
讓代碼簡潔,耦合性更低。
2. 主要核心內容:註冊(事件訂閱)方法、事件發布方法、反註冊(取消訂閱)方法。

3. EventBus通過DCL單例獲取一個實例 EventBus.getDefault();

EventBus一共提供了4種線程模型ThreadModel,分別是PostThread, MainThread, BackgroundThread, Async。
PostThread --------------默認實現,執行發生在發布事件的同一個線程;
MainThread --------------執行在UI主線程上;
BackgroundThread、Async---兩個都是通過Executors.newCachedThreadPool()線程池來執行的。


Event事件,任意類型對象;
subsciber 事件訂閱者,
publisher 事件發布者,EnentBus.post(Object)

EnventBus.getDefault()
EnventBus.getDefault().register()
EnventBus.getDefault().unregister()
EnventBus.getDefault().post(Object)
四、 EventBus3.0版本引入了註解來訂閱處理函數
可以通過運行時註解+反射來獲取訂閱回調函數
也可以通過編譯時@Subscribe註解生成class文件,編譯時生成MyEventBusIndex類,該類中包含了List<SubscriberMethod>內容。

EventBus事件總線框架(發布者/訂閱者模式,觀察者模式)