EventBus源碼解析之概括分析

前言與概述

之前接觸過CanBus相關的項目,大概的模型就是數據的發送與接收。代碼中到處調用Handler以及靜態對象,代碼顯得臃腫而且解耦方面做的不好,代碼可讀性差。於是思索着不重複造車,找了下相關開源代碼。Evenbus的兩個特性挺符合需求的:一個是代碼量少,幾行代碼搞定功能,一個方法以及註解就滿足了功能實現和線程的切換。另一個是解耦做的很好,接收處理數據與邏輯處理的交互交給EventBus就可以了。有新的需求,OK!那麼增加個訂閱者就可以了。Evenbus的使用很簡單,這邊就不介紹了。這裏主要是想要學習源碼的思想,最終達到學以致用。  

源碼分析

1、總體分析 

Eventbus主要分爲註冊\解除註冊、事件分發、獲取註解信息等等這幾塊。代碼量不是很多,可以從抽象到細節分析,最後分成知識塊各個突破。訂閱者的註冊以及事件的分發都集中在Eventbus.java這個類文件中。所以首先就是從這個類入手,層層深入。Eventbus.java與其他類的簡單依賴關係如下所示: 

 

2、 構造器

EventBus的構造方法。一個是用到了單例模式,一個是用到了建造者模式。單例模式採用的是雙檢鎖/雙重校驗鎖方式,安全且在多線程情況下能保持高性能。下圖是單例模式的流程圖: 

其中單例模式最終也是調用了構造方法裏面的建造者模式。 

3、註冊

註冊的話一個是獲取註解以及方法名等相關信息存入緩存中,另一個是對粘性事件的處理。註冊的流程圖如下所示: 

4、事件分發

事件分發分爲兩部分:首先是獲取所有訂閱該事件的可分發的訂閱者,其次是根據不同的線程模式移入不同的線程進行邏輯處理。流程圖如下所示: 

5、解除註冊

解除註冊比較簡單就是把訂閱者從緩存中移除。流程圖如下所示:

涉及到的技術點

        1、多線程的應用

        2、反射以及註解

        3、Gradle的使用(索引)

        4、設計模式

後記

這篇文章只是初步描述了下,後續將具體分析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章