EventBus3.0使用(三)

上一篇EventBus3.0使用(二)

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

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

定義優(yōu)先級 Priorities

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

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

取消事件傳遞

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

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

訂閱者索引

對于上面所描述的EventBus的功能,是通過Java反射來獲取訂閱方法,這樣以來大大降低了EventBus的效率,同時(shí)也影響了我們應(yīng)用程序的效率。其實(shí)對于反射的處理解析不僅僅只能夠通過Java反射的方式來進(jìn)行,還能夠通過apt(Annotation Processing Tool)來處理。為了提高效率,EventBus提供這中方式來完成EventBus的執(zhí)行過程。下面就來看一下對于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)目沒有錯(cuò)誤的情況下重新rebuild之后會在build目錄下面生成MyEventBusIndex文件,文件名可以自定義。下面就來看一下如何使用這個(gè)MyEventBusIndex。
      我們可以自定義設(shè)置自己的EventBus來為其添加MyEventBusIndex對象。代碼如下所示:
EventBus eventBus = EventBus.builder().addIndex(new MyEventBusIndex()).build();
  • 我們也能夠?qū)yEventBusIndex對象安裝在默認(rèn)的EventBus對象當(dāng)中。代碼如下所示:
EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();
// Now the default instance uses the given index. Use it like this:
EventBus eventBus = EventBus.getDefault();

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

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

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

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

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