EventBus3.0使用(三)

上一篇EventBus3.0使用(二)

優(yōu)先級(jí)和事件取消

EventBus也有優(yōu)先級(jí)之分,和廣播類似的,優(yōu)先級(jí)越高,那么就越先獲得事件的回調(diào),并且也可以取消資格事件,就不繼續(xù)往下分發(fā)事件了。但是有一點(diǎn)需要注意的,取消事件只允許在ThreadMode在ThreadMode.PostThread的事件處理方法中。

定義優(yōu)先級(jí) Priorities

@Subscribe(priority = 1)
public void onEvent(MessageEvent event) {
  …
}

優(yōu)先高的會(huì)優(yōu)先比優(yōu)先級(jí)低的接收到事件,默認(rèn)優(yōu)先級(jí)為0,并且并不會(huì)因?yàn)門hreadMode而影響到順序。

取消事件傳遞

@Subscribe
public void onEvent(MessageEvent event){
// Process the event
  …
EventBus.getDefault().cancelEventDelivery(event) ;
}

事件通常是由更高優(yōu)先級(jí)的用戶取消。并且僅限于在發(fā)布線程運(yùn)行ThreadMode.PostThread事件處理。

訂閱者索引

對(duì)于上面所描述的EventBus的功能,是通過(guò)Java反射來(lái)獲取訂閱方法,這樣以來(lái)大大降低了EventBus的效率,同時(shí)也影響了我們應(yīng)用程序的效率。其實(shí)對(duì)于反射的處理解析不僅僅只能夠通過(guò)Java反射的方式來(lái)進(jìn)行,還能夠通過(guò)apt(Annotation Processing Tool)來(lái)處理。為了提高效率,EventBus提供這中方式來(lái)完成EventBus的執(zhí)行過(guò)程。下面就來(lái)看一下對(duì)于EventBus的另一種使用方式。

  • 添加以下到Gradle build
buildscript {    
   dependencies {        
       classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'    
    }
}
apply plugin: 'com.neenbedankt.android-apt'
dependencies {    
    compile 'org.greenrobot:eventbus:3.0.0'    
    apt 'org.greenrobot:eventbus-annotation-processor:3.0.1'
}
apt {    
arguments {        
    eventBusIndex "com.example.myapp.MyEventBusIndex"    
   }
}
  • 在當(dāng)我們使用EventBus以后,在我們的項(xiàng)目沒(méi)有錯(cuò)誤的情況下重新rebuild之后會(huì)在build目錄下面生成MyEventBusIndex文件,文件名可以自定義。下面就來(lái)看一下如何使用這個(gè)MyEventBusIndex。
      我們可以自定義設(shè)置自己的EventBus來(lái)為其添加MyEventBusIndex對(duì)象。代碼如下所示:
EventBus eventBus = EventBus.builder().addIndex(new MyEventBusIndex()).build();
  • 我們也能夠?qū)yEventBusIndex對(duì)象安裝在默認(rèn)的EventBus對(duì)象當(dāng)中。代碼如下所示:
EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();
// Now the default instance uses the given index. Use it like this:
EventBus eventBus = EventBus.getDefault();

剩下對(duì)于EventBus的用法則是一模一樣。當(dāng)然也建議通過(guò)添加訂閱者索引這種方式來(lái)使用EventBus,這樣會(huì)比通過(guò)反射的方式來(lái)解析注解效率更高。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對(duì)于Android開(kāi)發(fā)老司機(jī)來(lái)說(shuō)肯定不會(huì)陌生,它是一個(gè)基于觀察者模式的事件發(fā)布/訂閱框架,開(kāi)發(fā)者可以通過(guò)極少的代碼...
    飛揚(yáng)小米閱讀 1,547評(píng)論 0 50
  • 項(xiàng)目到了一定階段會(huì)出現(xiàn)一種甜蜜的負(fù)擔(dān):業(yè)務(wù)的不斷發(fā)展與人員的流動(dòng)性越來(lái)越大,代碼維護(hù)與測(cè)試回歸流程越來(lái)越繁瑣。這個(gè)...
    fdacc6a1e764閱讀 3,342評(píng)論 0 6
  • “Some Interesting Open Source Projects of Android”這個(gè)系列主要是...
    Burjal閱讀 2,734評(píng)論 2 10
  • 本文的EventBus,是指greenrobot的 EventBus, 主要以EventBus3.0 講解; 什么...
    Simon_z閱讀 5,261評(píng)論 2 2
  • 前兩天遇到一個(gè)突發(fā)狀況,正在用筆記本電腦聽(tīng)課的時(shí)候,忽然類似發(fā)電機(jī)的聲音響個(gè)不停,同時(shí)電腦死機(jī),由于未遇到這種情況...
    艷言艷語(yǔ)閱讀 245評(píng)論 0 0

友情鏈接更多精彩內(nèi)容