eventbus3.0的新特性:
3.0采用注解的方式,而不用像以前每个方法都要onEvent开头,在注解中可以添加线程模式,是否延迟,优先级。
3.0使用apt对注解的方法在编译时形成索引文件,相对于之前在运行时通过反射的方式在性能上得到了很大的提升。
apt是什么
Android annotation process tool是一种处理注释的工具;它可以在编译时把注解生成代码,class文件。
eventbus3.0的使用
在此只针对Gradle3.0以上的使用,
在project gradle中配置
dependencies {
.........
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
在app gradle中配置
defaultConfig {
.........
javaCompileOptions {
annotationProcessorOptions {
arguments= [ eventBusIndex :'com.halo.event.MyEventBusIndex' ](填写自己的packagename+自定义类名)
}
}
}
dependencies {
implementation 'org.greenrobot:eventbus:3.1.1'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
}
编译一下,会生成如下文件,即索引类
此时如果我们想要使用索引类,我们就要Application类中
EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();
这样我们在应用时就可以通过EventBus.getDefault()来进行使用。
下面就是我们所熟悉的发送和接受事件了。我们要在接受事件的Activity或Fragment中的onStart()中进行注册
EventBus.getDefault().register(this);
然后再onStop()中进行解注册
EventBus.getDefault().unregister(this);
接受事件的方法使用注解@Subscribe
@Subscribe(threadMode= ThreadMode.POSTING, priority =0, sticky =true)
public void handleEvent ( DriverEventevent ){
Log.d(TAG,event.info);
}
注解有三个参数:
threadMode: 回调所在的线程
priority: 优先级
sticky: 是否接收黏性事件
注册监听模块必须有一个标注Subscribe注解方法,否则register时会抛出异常:
Subscriberclass XXX and its super classes havenopublic methods with the@Subscribeannotation
发送事件
调用post或postSticky即可。
接收事件的模块需要注册发送事件的模块无须注册
EventBus.getDefault().post(new DriverEvent("magnet:?xt=urn:btih……"));
到此,整个流程算是结束了,下一篇我们将针对EventBus3.0源码进行解析,敬请期待!
网友评论