android事件匯流排(eventbus)設計與實現

來源:互聯網
上載者:User

標籤:

1. 功能介紹

AndroidEventBus是一個Android平台的事件匯流排庫, 它簡化了Activity、Fragment、Service等組件或者對象之間的互動,很大程度上降低了它們之間的耦合,使得我們的代碼更加簡潔,耦合性更低,提升我們的代碼品質。

AndroidEventBus吸收了greenrobot的EventBus以及square的otto的優點,並在此基礎上做出了相應的改進,使得事件匯流排架構更適合使用者的使用習慣,也使得事件的投遞更加的精準、靈活。

與EventBus、otto的區別
名稱 訂閱函數是否可執行在其他線程 特點
greenrobot的EventBus 使用name pattern模式,效率高,但使用不方便。
square的otto 使用註解,使用方便,但效率比不了EventBus。
AndroidEventBus 使用註解,使用方便,但效率比不上EventBus。訂閱函數支援tag(類似廣播接收器的Action)使得事件的投遞更加準確,能適應更多使用情境。

更多細節請參考AndroidEventBus、Android事件匯流排 ( AndroidEventBus ) 開源庫發布。

2. 總體設計

 

AndroidEventBus簡約整體設計大致如所示,主要分為三個部分,即EventBus、SubscriberMethodHunter、EventHandler。

EventBus負責訂閱對象與事件的管理,比如註冊、登出以及發布事件等。在初始時將某個對象註冊到EventBus中,EventBus會遍曆該對象class中的所有方法,把參數數量為1且用了Subscriber註解標識的函數管理起來,以事件類型和訂閱函數Subscriber的tag構建一個EventType作為一種事件類型,某個事件類型對應有一個接收者列表。當有事件發布時,EventBus會根據發布的事件類型與tag構建EventType,然後找到對應的訂閱者列表,並且將這些事件投遞給所有訂閱者。SubscriberMethodHunter負責尋找合適的EventType,而EventHandler則負責將這些訂閱函數執行到相應的線程中。至此,整個事件匯流排的操作流程就完成了,當然在將Activity、Fragment等組件註冊到EventBus時,不要忘了在這些對象銷毀時將它們從EventBus中移除,即調用unregister方法。

3. 流程圖註冊接收者簡單流程圖

 發布事件簡單流程圖

 4. 詳細設計4.1 核心類詳細介紹
  • EventBus : 事件匯流排核心類,封裝了訂閱對象的註冊、登出以及事件的發布、投遞等,是事件匯流排最核心的類;
  • EventType : 事件類型對象,由事件Class類型與接收函數tag組成,用於標識一個事件類型;
  • Subscriber : Subscriber註解,作用於函數上,用於標識這個函數是一個事件訂閱函數;
  • ThreadMode : 接收函數的執行執行緒模式,預設執行在UI線程;
  • Subscription : 一個訂閱對象的封裝類,含有接收對象、目標方法、執行緒模式;
  • TargetMethod : 目標訂閱方法;
  • SubsciberMethodHunter : 訂閱者法尋找輔助類,根據事件對象尋找符合要求的EventType列表,EventBus根據這個返回的列表來投遞事件給訂閱者;
  • EventHandler : 事件處理器;
  • DefaultEventHandler : 預設的事件處理器,即事件在哪個線程投遞,則處理事件也在該線程;
  • UIThreadEventHandler : 事件處理在UI線程的Handler;
  • AsyncEventHandler : 事件處理在一個獨立線程的Handler;
  • MatchPolicy : 事件匹配策略介面;
  • DefaultMatchPolicy : 預設的匹配策略,發布事件時,EventBus會尋找參數是該事件父類的函數,並且構造對應的EventType;
  • StrictMatchPolicy : 嚴格的匹配策略,發布事件時只尋找參數類型完全符合的訂閱函數;
4.2 類別關係圖

 5. 雜談

事件匯流排的基本結構和設計都是類似的,只是大家在各種feature之間做了取捨或者增強了某些功能,使之能夠滿足使用者的具體需求。幾個事件匯流排庫的基本特點在章節1中已經粗略給出。大家可以根據自己的需求進行選擇。

本篇文章我們對AndroidEventBus做了一個簡介,在後續的文章中我們再進行詳細介紹,敬請期待。



來自為知筆記(Wiz)

android事件匯流排(eventbus)設計與實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.