EventBus的簡單實現

2021-09-25 13:01:38 字數 1348 閱讀 7476

首先從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...