EventBus源碼閱讀筆記(1)

本例子基於EventBus2.4.0的源碼,全部筆記都以圖片的方式呈現,因爲在博客上粘貼代碼,實在難看。

1.閱讀源碼時使用的例子,包名是com.subuju.eventbus;
這裏寫圖片描述

2.進入EventBus.getDefault()
這裏寫圖片描述

3.new EventBus()
這裏寫圖片描述

4.繼續看另一個重載的構造方法
這裏寫圖片描述

5.好了,代碼執行到這裏,就完成了EventBus的實例化,接下來就可以看看它的register(this)方法了
這裏寫圖片描述

6.register(Object subscriber)
這裏寫圖片描述

7.findSubscriberMethods(subscriber.getClass())
這裏寫圖片描述

接上圖:
這裏寫圖片描述

接上圖:
這裏寫圖片描述

接上圖:
這裏寫圖片描述

接上圖:
這裏寫圖片描述

接上圖:
這裏寫圖片描述

8.下面我們回到第六步“6.register(Object subscriber)”方法裏
這裏寫圖片描述

9.接着進去subscribe(subscriber, subscriberMethod, sticky,priority);
這裏寫圖片描述

接上圖:
這裏寫圖片描述

接上圖:
這裏寫圖片描述

接上圖:
這裏寫圖片描述

10 至此我們已經完成了EventBus.getDefault().register(this)執行邏輯的分析,我們可以總結出如下結論:

  1. EventBus通過反射拿到我們在類中定義的接收事件的處理方法
  2. 通過該方法拿到我們的自定義事件類型
  3. 最後把我們註冊EventBus的類和自定義的事件類型關聯起來

11.到這裏大家可以做出如下猜想:

  1. 當我們調用EventBus.getDefault().post(new MyEvent())時,EventBus可能也是通過反射拿到我們發送的事件類型(本例中就是MyEvent),然後再到一個HashMap中(就是上面我們分析源碼時,MainActivity和MyEvent關聯起來的那個HashMap),拿到註冊的那個類(本例中就是MainActivity),最後通過MainActivity得到事件處理的方法,執行之!!!

12.那麼我們的猜想是否正確呢?大家拭目以待下篇的EventBus源碼閱讀筆記(2)

發佈了34 篇原創文章 · 獲贊 19 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章