public static eventbus getdefault() }}
return defaultinstance;
}
這裡是註冊訂閱者的地方,同樣的註冊方式有這麼:
它們之間最主要的區別就是引數的不同。在實現上它們都是呼叫void register(object subscriber, boolean sticky, int priority)
函式實現的。
public void register(object subscriber)
}}
首先是呼叫了這樣的乙個方法 findsubscribermethods()
listfindsubscribermethods(class<?> subscriberclass)
如果已經訂閱也就是註冊了就直亅接返回乙個訂閱的 方法的集合 subscribermethods
subscribe
這個方法的引數呢就是乙個訂閱者subscriber 乙個是 訂閱者的型別 subscribermethod
回去後乙個for迴圈遍歷所有的方法這時候呢這麼就知道這個方法是接受的方法呢就是乙個標識 @subscribe註解
傳送的乙個黏性事件
public void poststicky(object event)
post(event);
這裡呢主要是做乙個記錄 就是講黏性事件記錄在乙個集合裡在接受的時候會做判斷事件的型別
但是最終都會走這個post方法
幾個標紅的方法 post不管是黏性還是普通都會走這個方法
eventqueue他是乙個事件的佇列的集合
postingstate.canceled 這個呢是做了乙個是否已經攔截的處理 eventbus有乙個攔截的方法
postsingleevent 我們進去看他做了什麼
postsingleevent這個方法 你看他的引數 postingstate看這個 乙個looper輪詢器 進去後呢
//發布到訂閱
登出呢邏輯也很簡單就是遍歷訂閱的集合 然後把我們傳進去的訂閱 也就是這個this 從集合刪除
public synchronized void unregister(object subscriber)
typesbysubscriber.remove(subscriber);
} else
}
eventbus.b
為什麼要呼叫 builder
我們不可以直接new乙個出來嗎,看原始碼
原來eventbusbuilder的建構函式不是public的。。。。但是eventbusbuilder有個方法可以得到eventbus例項
eventbus e = eventbus.builder()
.eventinheritance(true)
.ignoregeneratedindex(true)
.installdefaulteventbus();
執行緒通訊的一種
eventbus採用的是觀察者模式,
乙個黏性事件,和普通事件,發布者,和訂閱者『』
接收方法有一定的限制,首先方法必須是public
數的型別必須是我們定義的事件類,比如說我們傳送了乙個string型別的
接受的時候也要是乙個string型別的對吧
而且方法必須新增」
@subscribe「註解,因為在eventbus內部查詢方法時,是根據註解來進行區分;
EventBus原始碼分析
前言 eventbus在現如今android專案中用來進行通訊使用很廣泛。在本篇文章中,我將會分為下面幾個模組來講解eventbus 如何使用,原始碼分析,使用注意事項,高階技能。除了上面說的幾個exception,如果我們重複呼叫register的話,會出現throw new eventbu ce...
EventBus 簡單原始碼 原理分析
1.初始化 eventbus.getdefatult 單例模式初始化。public static eventbus getdefault return instance 傳入乙個預設builder 進行初始化 public eventbus eventbus eventbusbuilder buil...
EventBus2 2原始碼分析
由於我們專案使用了eventbus2,所以檢視一下原始碼,了解一下原理 關鍵的event快取資料結構 訂閱方法,按event型別歸類 private final map,copyonwritearraylist subscriptionsbyeventtype 快取已經註冊的物件,可防止物件重複註冊...