Android 三方库EventBus的使用
EventBus簡述
EventBus是一款針對Android優化的發布/訂閱事件總線。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息.優點是開銷小,代碼更優雅。以及將發送者和接收者解耦。
EventBus的使用
- 首先,需要在當前項目的build.gradle下添加依賴代碼:
- 其次,可以定義一個消息類(可以傳對象或者字符串,如需其他類型,可自行添加),eg:
- 接下來,需要在接受消息的頁面注冊:
- 然后,需要發送消息:
- 接下來, 在接受消息的實現:
- 最后,需要解除注冊
注:Subscriber:事件訂閱者,在EventBus 3.0之前我們必須定義以onEvent開頭的那幾個方法,分別是onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,而在3.0之后事件處理的方法名可以隨意取,不過需要加上注解@Subscribe,并且指定線程模型,默認是POSTING。
其中,線程模式有四種:
- POSTING:默認,表示事件處理函數的線程跟發布事件的線程在同一個線程。
- MAIN:表示事件處理函數的線程在主線程(UI)線程,因此在這里不能進行耗時操作。
- BACKGROUND:表示事件處理函數的線程在后臺線程,因此不能進行UI操作。如果發布事件的線程是主線程(UI線程),那么事件處理函數將會開啟一個后臺線程,如果果發布事件的線程是在后臺線程,那么事件處理函數就使用該線程。
- ASYNC:表示無論事件發布的線程是哪一個,事件處理函數始終會新建一個子線程運行,同樣不能進行UI操作。
黏性事件
所謂的黏性事件,就是指發送了該事件之后再訂閱者依然能夠接收到的事件。使用黏性事件的時候有兩個地方需要做些修改。一個是訂閱事件的地方,這里我們在先打開的Activity中注冊監聽黏性事件:
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)在發送消息的地方,發送黏性事件消息:
EventBus.getDefault().postSticky(MessageWrap.getInstance(msg));按照上面的模式,我們先在第一個Activity中打開第二個Activity,然后在第二個Activity中發布黏性事件,并回到第一個Activity注冊EventBus。
優先級
在Subscribe注解中總共有3個參數,上面我們用到了其中的兩個,這里我們使用以下第三個參數,即priority。它用來指定訂閱方法的優先級,是一個整數類型的值,默認是0,值越大表示優先級越大。在某個事件被發布出來的時候,優先級較高的訂閱方法會首先接受到事件。
注意:
- 只有當兩個訂閱方法使用相同的ThreadMode參數的時候,它們的優先級才會與priority指定的值一致;
- 只有當某個訂閱方法的ThreadMode參數為POSTING的時候,它才能停止該事件的繼續分發。
總結
以上是生活随笔為你收集整理的Android 三方库EventBus的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 三方库lottie、mm
- 下一篇: Android 使用 ActivityR