EventBus3.0 在Gradle3.0以上的使用

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'

}

编译一下,会生成如下文件,即索引类


EventBus3.0 在Gradle3.0以上的使用_第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源码进行解析,敬请期待!

你可能感兴趣的:(EventBus3.0 在Gradle3.0以上的使用)