EventBus :概述及基本概念 《一》,eventbus《一》
一 概述及基本概念感謝大家來光顧我的部落格,有人說EventBus這篇部落格,看起來很費勁,既然大家都開口了,我就整理一下,用目錄的形式來展示,方便大家讀懂。
**EventBus**是一個Android端最佳化的publish/subscribe訊息匯流排,簡化了應用程式內各組件間、組件與後台線程間的通訊。比如請求網路,等網路返回時通過Handler或Broadcast通知UI,兩個Fragment之間需要通過Listener通訊,這些需求都可以通過**EventBus**實現。
作為一個訊息匯流排,有三個主要的元素:
- Event:事件
- Subscriber:事件訂閱者,接收特定的事件
- Publisher:事件發行者,用於通知Subscriber有事件發生
下面是四隊每個元素的講解:Event
**Event**可以是任意類型的對象。
Subscriber
在EventBus中,使用約定來指定事件訂閱者以簡化使用。即所有事件訂閱都都是以onEvent開頭的函數,具體來說,函數的名字是onEvent,onEventMainThread,onEventBackgroundThread,onEventAsync這四個,這個和ThreadMode有關,後面再說。
Publisher
可以在任意線程任意位置發送事件,直接調用EventBus的`post(Object)`方法,可以自己執行個體化EventBus對象,但一般使用預設的單例就好了:`EventBus.getDefault()`,根據post函數參數的類型,會自動調用訂閱相應類型事件的函數。
ThreadMode
前面說了,Subscriber函數的名字只能是那4個,因為每個事件訂閱函數都是和一個`ThreadMode`相關聯的,ThreadMode指定了會調用的函數。有以下四個ThreadMode:
- PostThread:事件的處理在和事件的發送在相同的進程,所以事件處理時間不應太長,不然影響事件的發送線程,而這個線程可能是UI線程。對應的函數名是onEvent。
- MainThread: 事件的處理會在UI線程中執行。事件處理時間不能太長,這個不用說的,長了會ANR的,對應的函數名是onEventMainThread。
- BackgroundThread:事件的處理會在一個後台線程中執行,對應的函數名是onEventBackgroundThread,雖然名字是BackgroundThread,事件處理是在後台線程,但事件處理時間還是不應該太長,因為如果發送事件的線程是後台線程,會直接執行事件,如果當前線程是UI線程,事件會被加到一個隊列中,由一個線程依次處理這些事件,如果某個事件處理時間太長,會阻塞後面的事件的派發或處理。
- Async:事件處理會在單獨的線程中執行,主要用於在後台線程中執行耗時操作,每個事件會開啟一個線程(有線程池),但最好限制線程的數目。
根據事件訂閱都函數名稱的不同,會使用不同的ThreadMode,比如果在後台線程載入了資料想在UI線程顯示,訂閱者只需把函數命名為onEventMainThread。
接下來是對EventBus的簡單使用。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。