EventBus是一款针对Android优化的发布/订阅事件总线。通过EventBus基本上摆脱了对广播、Handler的依赖,很轻松的就能实现进程间,组件间的消息传递。
1、定义一个消息类型
public class SimpleEvent {
public String name;
}
只是一个简单的Java类,用于传递消息内容
2、在接收消息的类中注册
EventBus.getDefault().register(this);
3、发送消息
SimpleEvent event = new SimpleEvent();
event.name = "test";
EventBus.getDefault().post(event);
4、接收消息
@Subscribe(threadMode = ThreadMode.MAIN)
public void on3EventMainThread(SimpleEvent event){
Log.d("EventBus", "EventActivity.on3EventMainThread: " + event.name);
}
我们可以指定方法运行的线程,这里指定的线程为UI线程
5、解除注册
EventBus.getDefault().unregister(this);
上边就是eventBus的基本使用,没有任何的困难,只是有还有一些细节问题,我们先不管了,这不是重点,这种方法用起来方便简单,但是性能上确实大打折扣,因为在注册过程中使用了大量的反射,那反射是一个很耗性能的一项操作。在EventBus3.0之前的版本,确确实实的存在者这样的问题,EventBus也意识到了这个问题,因此在EventBus3.0以后的版本,使用了编译时注解,大大提高的了性能。当然在使用上有点改变。
1、修改build.gradle文件
apply plugin: 'com.android.application'
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
// 在这里指定索引
arguments = [ eventBusIndex : 'org.fishpan.eventbus.EventBusIndex' ]
}
}
}
}
dependencies {
compile 'org.greenrobot:eventbus:3.0.0'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.0.1'
}
2、注册之前
EventBus.builder().addIndex(new EventBusIndex()).installDefaultEventBus();
OK,除去这些,其它不需要做任何改变。到此EventBus的基本用法,就结束了。下面我们会具体分析EventBus的源码,来看看怎么样使用编译注解实现性能提升的。