Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android資訊 >> AndroidEventBus (事件總線) 的設計與實現

AndroidEventBus (事件總線) 的設計與實現

編輯:Android資訊

1. 功能介紹

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

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

與EventBus、otto的區別

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

2. 總體設計

arch

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. 流程圖

注冊接收者簡單流程圖

flow

發布事件簡單流程圖

flow

4. 詳細設計

4.1 核心類詳細介紹

  • EventBus : 事件總線核心類,封裝了訂閱對象的注冊、注銷以及事件的發布、投遞等,是事件總線最核心的類;
  • EventType : 事件類型對象,由事件Class類型與接收函數tag組成,用於標識一個事件類型;
  • Subcriber : Subcriber注解,作用於函數上,用於標識這個函數是一個事件訂閱函數;
  • ThreadMode : 接收函數的執行線程模型,默認執行在UI線程;
  • Subscription : 一個訂閱對象的封裝類,含有接收對象、目標方法、線程模型;
  • TargetMethod : 目標訂閱方法;
  • SubsciberMethodHunter : 訂閱方法查找輔助類,根據事件對象查找符合要求的EventType列表,EventBus根據這個返回的列表來投遞事件給訂閱者;
  • EventHandler : 事件處理器;
  • DefaultEventHandler : 默認的事件處理器,即事件在哪個線程投遞,則處理事件也在該線程;
  • UIThreadEventHandler : 事件處理在UI線程的Handler;
  • AsyncEventHandler : 事件處理在一個獨立線程的Handler;
  • MatchPolicy : 事件匹配策略接口;
  • DefaultMatchPolicy : 默認的匹配策略,發布事件時,EventBus會查找參數是該事件父類的函數,並且構造對應的EventType;
  • StrictMatchPolicy : 嚴格的匹配策略,發布事件時只查找參數類型完全匹配的訂閱函數;

4.2 類關系圖

uml

5. 雜談

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

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

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved