本例子基於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)執行邏輯的分析,我們可以總結出如下結論:
- EventBus通過反射拿到我們在類中定義的接收事件的處理方法
- 通過該方法拿到我們的自定義事件類型
- 最後把我們註冊EventBus的類和自定義的事件類型關聯起來
11.到這裏大家可以做出如下猜想:
- 當我們調用EventBus.getDefault().post(new MyEvent())時,EventBus可能也是通過反射拿到我們發送的事件類型(本例中就是MyEvent),然後再到一個HashMap中(就是上面我們分析源碼時,MainActivity和MyEvent關聯起來的那個HashMap),拿到註冊的那個類(本例中就是MainActivity),最後通過MainActivity得到事件處理的方法,執行之!!!
12.那麼我們的猜想是否正確呢?大家拭目以待下篇的EventBus源碼閱讀筆記(2)