EventBus二之反射原理

2021-10-02 05:46:52 字數 2543 閱讀 8248

目錄

1)新建android libray

2)定義eventbus反射機制需要的元素

3)實現eventbus核心類

新建android libray

定義eventbus反射機制需要的元素

a. 新增註解類

@target

(elementtype.method)

@retention

(retentionpolicy.runtime)

public @inte***ce

subscribe

b. 新增threadmode類

public

enum threadmode

c. 新增實體類,描述訂閱方法

public

class

methodmanager

public class<

?>

gettype()

public

void

settype

(class<

?> type)

public threadmode getthreadmode()

public

void

setthreadmode

(threadmode threadmode)

public method getmethod()

public

void

setmethod

(method method)

@nonnull

@override

public string tostring()

';}}

實現eventbus核心類
public

class

eventbus

public

static eventbus getdefault()

}}return instance;

}// 找到mainactivity所有帶符合註解的方法

public

void

register

(object getter)

}// 獲取mainactivity中所有註解的方法

private list

findannotationmethod

(object getter)

// 迴圈方法

for(method method : methods)

// 嚴格控制方法格式和規範

// 方法必須是返回void(一次匹配)

type returntype = method.

getgenericreturntype()

;if(!

"void"

.equals

(returntype.

tostring()

))// 方法引數必須有值(二次匹配)

class<

?>

parametertypes = method.

getparametertypes()

;if(parametertypes.length !=1)

// 完全符合要求、規範的方法,儲存到方法物件中methodmanager(3個重要成員:方法、引數、執行緒)

methodmanager manager =

newmethodmanager

(parametertypes[0]

, subscribe.

threadmode()

, method)

; methodlist.

add(manager);}

clazz = clazz.

getsuperclass()

;}return methodlist;

}// secondactivity傳送訊息

public

void

post

(final object setter)

else})

;}break

;case background:

// 先判斷傳送方是否在主線程

if(looper.

mylooper()

== looper.

getmainlooper()

)});

}else

break;}

}}}}

}// 找到匹配方法後,通過反射呼叫mainactivity中所有符合要求的方法

private

void

invoke

(methodmanager method, object getter, object setter)

catch

(illegalacces***ception

| invocationtargetexception e)

}}

**傳送

vue原始碼之 eventBus原理

vue中eventbus可以用來進行任何元件之間的通訊,我們可以把eventbus當成乙個管道,這個管道兩端可以接好多元件,兩端的任何乙個元件都可以進行通訊。其實這個管道就是vue例項,例項中的 on,off,emit方法來實現此功能。先通過簡單例子看看eventbus怎麼用。vue.js scri...

EventBus原理詳解

在eventbus 3.0 使用介紹 這篇部落格中介紹了關於eventbus的一些使用方法,下面我們就來看看它內部的具體實現吧!通過上面的幾張圖,我們可以大致了解eventbus的工作流程,下面我們在來介紹一下這個流程中比較重要的幾個方法 listfindsubscribermethods clas...

VUE原始碼分析之eventBus原理

vue中eventbus可以用來進行任何元件之間的通訊,我們可以把eventbus當成乙個管道,這個管道兩端可以接好多元件,兩端的任何乙個元件都可以進行通訊。其實這個管道就是vue例項,例項中的 on,off,emit方法來實現此功能。還是老樣子,先通過簡單例子看看eventbus怎麼用。我們例項化...