EventBus :概述及基本概念 《一》,eventbus《一》

來源:互聯網
上載者:User

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的簡單使用。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.