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

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

你可能感兴趣的:(EventBus源码解析(一))