EventBus基本理解

2021-07-02 19:26:43 字數 1705 閱讀 2757

eventbus是乙個android端優化的publish/subscribe訊息匯流排,簡化了應用程式內各元件間、元件與後台執行緒間的通訊。比如請求網路,等網路返回時通過handler或broadcast通知ui,兩個fragment之間需要通過listener通訊,這些需求都可以通過eventbus實現。作為乙個訊息匯流排,有三個主要的元素:

1. event:事件

2. subscriber:事件訂閱者,接收特定的事件

3. publisher:事件發布者,用於通知subscriber有事件發生

是乙個發布 / 訂閱的事件匯流排。

包含4個成分:發布者,訂閱者,事件,匯流排

關係:訂閱者訂閱事件到匯流排,傳送者發布事件。

大體應該是這樣的關係:

event可以是任意型別的物件。

在eventbus中,使用約定來指定事件訂閱者以簡化使用。即所有事件訂閱都都是以onevent開頭的函式,具體來說,函式的名字是onevent,oneventmainthread,oneventbackgroundthread,oneventasync這四個,這個和threadmode有關,後面再說。

可以在任意執行緒任意位置傳送事件,直接呼叫eventbus的post(object)方法,可以自己例項化eventbus物件,但一般使用預設的單例就好了:eventbus.getdefault(),根據post函式引數的型別,會自動呼叫訂閱相應型別事件的函式。

前面說了,subscriber函式的名字只能是那4個,因為每個事件訂閱函式都是和乙個threadmode相關聯的,threadmode指定了會呼叫的函式。有以下四個threadmode:

postthread:事件的處理在和事件的傳送在相同的程序,所以事件處理時間不應太長,不然影響事件的傳送執行緒,而這個執行緒可能是ui執行緒。對應的函式名是onevent。

mainthread: 事件的處理會在ui執行緒中執行。事件處理時間不能太長,這個不用說的,長了會anr的,對應的函式名是oneventmainthread。

backgroundthread:事件的處理會在乙個後台執行緒中執行,對應的函式名是oneventbackgroundthread,雖然名字是backgroundthread,事件處理是在後台執行緒,但事件處理時間還是不應該太長,因為如果傳送事件的執行緒是後台執行緒,會直接執行事件,如果當前執行緒是ui執行緒,事件會被加到乙個佇列中,由乙個執行緒依次處理這些事件,如果某個事件處理時間太長,會阻塞後面的事件的派發或處理。

async:事件處理會在單獨的執行緒中執行,主要用於在後台執行緒中執行耗時操作,每個事件會開啟乙個執行緒(有執行緒池),但最好限制執行緒的數目。根據事件訂閱都函式名稱的不同,會使用不同的threadmode,比如果在後台執行緒載入了資料想在ui執行緒顯示,訂閱者只需把函式命名為oneventmainthread。

如果在乙個訂閱者中四個方法均依次實現,那麼四個方法都會都正常執行,執行無固定的順序。

EventBus簡單理解

eventbus是一款針對android優化的發布 訂閱事件匯流排。主要功能是替代intent,handler,broadcast在fragment,activity,service,執行緒之間傳遞訊息.優點是開銷小,更優雅。以及將傳送者和接收者解耦。那麼eventbus應該怎麼使用呢。1.首先我們...

EventBus的簡單理解

1.新增依賴compile org.greenrobot eventbus 3.0.0 2.定義乙個類,有參構造方法。我的簡單的理解 接收方和傳送方和eventbus的關係 接收方相當於訂閱報紙,傳送方相當於報社,eventbus相當於送報紙的人,只有你先訂閱了報紙,報社會讓人給你去送報紙 所以想讓...

eventBus的基本使用

evenetbus的使用非常簡單,主要分為3個步驟 定義事件 訂閱事件 發布事件 第一步 4.新建乙個eventbus.js檔案 used in orderlist only import vue from vue const vm new vue export default newvue 第二步...