一、 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>內容。