首先從eventbus的訂閱方法開始
eventbus的接收方法有乙個註解@subscriber,無返回值,乙個引數 建立乙個annotation,命名為subscribe
定義此註解用在方法之上(@target(elementtype.method)),定義註解的生命週期為執行期(@retention(retentionpolicy.runtime))
原始碼裡有三個值,這裡我定義乙個threadmode(沒建立)
建立threadmode enum類,五個屬性
posting,main,main_ordered,background,async
可以看出乙個訂閱方法有三個屬性method(方法),threadmede(執行緒模式),class(方法的引數)
建立乙個類為methodmanger新增以上方法,實現get,set方法,新增乙個有參構造
eventbus註冊
建立eventbus類
實現getdefault()方法,eventbus為單例
建立屬性mapcachemap;在無參構造例項化
實現註冊方法register(object getter)
查詢cachemap裡是否存在,不存在則新增
已知key為getter,value是乙個list>型別,因為訂閱方法乙個類可以存在多個
定義乙個方法findannotationmethod獲取訂閱方法
通過反射獲取到class
class.getmethod()獲取到所有的方法
遍歷method
通過method.getannotation()獲取subscribe註解,如果不存在就continue
找到對method進行驗證,返回值必須是void(getgenericreturntype()),引數只能有乙個(
method.getparametertypes())不符合丟擲異常
符合新增到cachemap,直到class.getsuperclass()為null
eventbus反註冊
unregister(object obj)
cachemap.remove(obj)
eventbus傳送
post(object obj)
獲取到所有key
遍歷key
根據key獲取到value(list)
遍歷value
判斷訂閱方法的引數是否跟傳送的方法一致
通過反射method.invoke(類,方法引數)執行訂閱方法
簡單乙個eventbus寫完了
EventBus的簡單理解
1.新增依賴compile org.greenrobot eventbus 3.0.0 2.定義乙個類,有參構造方法。我的簡單的理解 接收方和傳送方和eventbus的關係 接收方相當於訂閱報紙,傳送方相當於報社,eventbus相當於送報紙的人,只有你先訂閱了報紙,報社會讓人給你去送報紙 所以想讓...
EventBus簡單實用
本人使用eventbus是在baseacitivity中的oncreate方法中註冊,就不需要一直註冊和取消註冊。oncreate 方法中註冊 eventbus.getdefault register this 在ondestroy 方法中取消註冊 eventbus.getdefault unreg...
EventBus簡單使用
eventbus是乙個開源的是乙個發布 訂閱的事件的框架,在業界即使沒有用過,也肯定聽過,要是真沒聽過,那從現在起你就聽說了。框架主要包含4個成分 發布者,訂閱者,事件,匯流排。訂閱者可以訂閱事件,傳送者發布事件,讓你的元件徹底解耦。使用姿勢 引入compile org.greenrobot eve...