Android框架之路 EventBus的使用

2021-09-28 11:27:53 字數 1302 閱讀 6083

eventbus是由greenrobot 組織貢獻的乙個android事件發布/訂閱輕量級框架。eventbus是乙個android端優化的publish/subscribe訊息匯流排,簡化了應用程式內各元件間、元件與後台執行緒間的通訊。比如請求網路,等網路返回時通過handler或broadcast通知ui,兩個fragment之間需要通過listener通訊,這些需求都可以通過eventbus實現。

翻譯:

compile 'org.greenrobot:eventbus:3.0.0'
eventbus的三要素eventbus的四種執行緒模型(threadmode)

main:事件的處理會在ui執行緒中執行。事件處理時間不能太長,長了會anr的。

background:如果事件是在ui執行緒中發布出來的,那麼該事件處理函式就會在新的執行緒中執行,如果事件本來就是子執行緒中發布出來的,那麼該事件處理函式直接在發布事件的執行緒中執行。在此事件處理函式中禁止進行ui更新操作。

async:無論事件在哪個執行緒發布,該事件處理函式都會在新建的子執行緒中執行,同樣,此事件處理函式中禁止進行ui更新操作。

使用步驟

粘性事件

之前說的使用方法,都是需要先註冊(register),再post,才能接受到事件;如果你使用poststicky傳送事件,那麼可以不需要先註冊,也能接受到事件,也就是乙個延遲註冊的過程。

普通的事件我們通過post傳送給eventbus,傳送過後之後當前已經訂閱過的方法可以收到。但是如果有些事件需要所有訂閱了該事件的方法都能執行呢?例如乙個activity,要求它管理的所有fragment都能執行某乙個事件,但是當前我只初始化了3個fragment,如果這時候通過post傳送了事件,那麼當前的3個fragment當然能收到。但是這個時候又初始化了2個fragment,那麼我必須重新傳送事件,這兩個fragment才能執行到訂閱方法。

粘性事件就是為了解決這個問題,通過 poststicky 傳送粘性事件,這個事件不會只被消費一次就消失,而是一直存在系統中,知道被 removestickyevent 刪除掉。那麼只要訂閱了該粘性事件的所有方法,只要被register 的時候,就會被檢測到,並且執行。訂閱的方法需要新增 sticky = true 屬性。

主線程傳送事件:

傳送粘性事件:

原始碼鏈結

Django框架之路由

路由就是請求位址與檢視函式的對映關係 urls.py url index view.index djaogo框架中必會技能 正規表示式,檢視函式views.py def article request return render request,index.html 我們知道在正規表示式中是可以進行...

Android開發 Android搜尋框架(二)

1.建立搜尋建議提供者 android已經為我們建立了乙個預設的,我們只需要繼承 searchrecentsuggestionprovider 就稍做修改就可以了。見 1 import android.content.searchrecentsuggestionsprovider 2 3 4 搜尋提...

android框架學習

從零開始 系統深入學習android 實踐 讓我們開始寫 android框架學習 7.通知 從零開始 系統深入學習android 實踐 讓我們開始寫 android框架學習 6.對話方塊 從零開始 系統深入學習android 實踐 讓我們開始寫 android框架學習 5.設定 settings 從...