目錄
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怎麼用。我們例項化...