以前的项目中使用的都是EventBus 2.x,现在换成了EventBus 3.0,关于怎么用,这里不写了,一搜一大片,此处主要记录EventBusAnnotationProcessor的使用。
1、 project下build.gradle的配置
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
2、app下build.gradle的配置
apply plugin: 'com.neenbedankt.android-apt'
apt {
arguments {
eventBusIndex "com.calvinning.MyEventBusIndex" //自动生成的索引包名
}
}
dependencies {
compile 'org.greenrobot:eventbus:3.0.0'
apt 'org.greenrobot:eventbus-annotation-processor:3.0.1'
}
3、编译一次
自动生成索引类。在\build\generated\source\apt\PakageName(此处我写的PackageName是com.calvinning)
4、 应用我们生成好的索引,并把自定义的设置应用到 EventBus 默认的单例中
EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();
installDefaultEventBus的注释如下:
Installs the default EventBus returned by {@link EventBus#getDefault()} using this builders' values.
Must be * done only once before the first usage of the default EventBus.
@throws EventBusException if there's already a default EventBus instance in place
就是说要应用我们生成好的索引,须在你第一次获得EventBus实例之前执行上述代码,鉴于此,我的做法是在自定义的Application里面执行这句代码,之后需要注册EventBus的地方依然调用EventBus.getDefault().
** 至于使用索引效率提升的测试,鉴于反射机制就是遍历注册的观察者的所有函数 ,所以我的方法是在Activity里面写了50个订阅事件,然后测试register方法的执行时间,不使用索引是25毫秒,使用索引是8毫秒。**
参考文章
老司机教你 “飙” EventBus 3
EventBus3.0性能优化之添加索引(Index)
EventBus3.0使用详解
Android消息传递之EventBus 3.0使用详解
看API到官方网站##
github地址:https://github.com/greenrobot/EventBus
官方文档:http://greenrobot.org/eventbus/documentation