EventBus認識(一)
簡介
EventBus是一個Android和Java的開源庫,使用 釋出者/訂閱者 模式進行鬆散耦合。EventBus只需幾行程式碼即可實現與分離類的集中通訊 - 簡化程式碼,消除依賴關係,並加速應用程式開發。

EventBus-Android的釋出 - 訂閱
EventBus特性
- 簡化了元件之間的通訊
- 將事件傳送者和接收者分離
- 在UI工件(例如,活動,片段)和後臺執行緒中表現良好
- 避免複雜且容易出錯的依賴關係和生命週期問題
- 很快; 專門針對高效能進行了優化
- 很小(<50kb)
- 是 ofollow,noindex">在實踐中被證明通過應用與100,000,000+安裝
- 具有交付執行緒,使用者優先順序等高階功能。
進一步的EventBus功能
- 方便的基於註釋的API:基於便捷註釋的API: 只需將@Subscribe註釋放入訂閱者方法即可。由於註釋的構建時間索引,EventBus不需要在應用程式的執行時進行註釋反射。
- Android主執行緒交付: 當與UI互動時,無論事件如何釋出,EventBus都可以在主執行緒中傳遞事件。
- 後臺執行緒傳遞: 如果您的訂閱者執行長時間執行的任務,EventBus也可以使用後臺執行緒來避免UI阻塞。
- 事件和訂閱者繼承: 在EventBus中,面向物件的範例適用於事件和訂閱者類。假設事件類A是B的超類。型別B的已釋出事件也將釋出給對A感興趣的訂閱者。同樣考慮訂閱者類的繼承。
- 快速 入門 : 您可以立即開始使用 - 無需配置任何內容 - 使用程式碼中任何位置提供的預設EventBus例項。
- 可配置: 要根據您的要求調整EventBus,您可以使用構建器模式調整其行為。
檢視EventBus的完整 功能集 。
開始使用EventBus
將EventBus新增到您的專案中
implementation 'org.greenrobot:eventbus:3.1.1'
<dependency> <groupId>org.greenrobot</groupId> <artifactId>eventbus</artifactId> <version>3.1.1</version> </dependency>
程式碼實現
1.定義事件,即建立一個java實體類如: MessageEvent.clss
public class MessageEvent { public final String message; public MessageEvent(String message) { this.message = message; } }
2.設定訂閱者
訂閱者實現事件處理方法(也稱為“訂閱者方法”),這些方法將在釋出事件時呼叫。這些是使用 @Subscribe
註釋定義的。常用的 ThreadMode
為 ThreadMode.MAIN
、 ThreadMode.POSTING
、 ThreadMode.MAIN_ORDERED
、 ThreadMode.BACKGROUND
、 ThreadMode.ASYNC
,接下來的文章將會講解 ThreadMode
執行緒的使用以及原理分析。
//釋出MessageEvent時將呼叫此方法(在Toast的UI執行緒中) @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show(); }
如果是粘性事件則這樣表示,後面的文章我們會分析粘性事件。
//釋出MessageEvent時將呼叫此方法(在Toast的UI執行緒中) @Subscribe(sticky = true,threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { Toast.makeText(getActivity(), event.message, Toast.LENGTH_SHORT).show(); }
使用者也需要從匯流排 註冊 和 登出 。只有在訂閱者註冊時,他們才會收到活動。在Android中,在活動和片段中,在生命週期中註冊和登出。對於大多數情況,onCreate / onDestroy工作正常。
//註冊 @Override public void onCreate () { super.onCreate (); EventBus.getDefault().register(this); } //解除繫結 @Override public void onDestroy() { EventBus.getDefault().unregister(this); super.onDestroy(); }
3.釋出活動
從程式碼的任何部分發布事件。所有當前註冊的與事件型別匹配的訂閱者都將收到它。
//釋出活動資訊,訂閱者將輸出Toast為Hello EventBus EventBus.getDefault().post(new MessageEvent("Hello EventBus!"));
如果是釋出粘性事件如下程式碼,而且必須接收的時候要改為粘性的接收方式。
EventBus.getDefault().postSticky(new MessageEvent("Hello EventBus!"));
下載
總結
EventBus讓Android元件之間的通訊變得非常簡單,並且在專案中使用非常簡單。
我們從EventBus的特性知道,EventBus給我們在開發中幫助非常大,要好好利用EventBus框架。
如果對釋出/訂閱(即觀察者模式)不怎麼了解的可以檢視本篇文章: 觀察者模式 。
推薦
-
EventBus的系列文章
-
我的部落格