1. 源碼分析
現象描述:
2.1. MainActivity裏面註冊 EventBus.register(this)
2.2. MainActivity裏面解綁 EventBus.unRegister(this)
2.3. 把需要接收的方法採用註解Subscribe
2.4.在任意的地方只要調用 EventBus.post就會執行 Subscribe的註解方法,前提是同類型的對象
自己去寫的時候會怎麼去實現?EventBus怎麼實現。
第一步:
findSubscriberMethods()
去解析註冊者對象的所有方法,並且找出帶有註解 Subscribe 註解的的方法,
然後通過Annotation解析所有細節參數(threadMode,priority,sticky,eventType,method),
把這些參數封裝成一個 SubscriberMethod,添加到集合返回。
第二步:
subscribe()
解析所有 SubscriberMethod的eventType,然後按照要求解析成
Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType
的格式,key 是 eventType,value就是 Subscription 的列表,Subscription包含兩個屬性subscriber,SubscriberMethod
第三步:
post()
遍歷 subscriptionsByEventType,找到符合的方法調用方法的 method.invoke() 執行。
第四部:
unregister()
移除