上一篇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,這樣會比通過反射的方式來解析注解效率更高。