EventBus源码解析(一)

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();

【EventBus源码解析(一)】OK,除去这些,其它不需要做任何改变。到此EventBus的基本用法,就结束了。下面我们会具体分析EventBus的源码,来看看怎么样使用编译注解实现性能提升的。

    推荐阅读