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的源码,来看看怎么样使用编译注解实现性能提升的。
推荐阅读
- python|记一次js逆向解析学习-02
- ssm框架体检管理系统源码+文档
- shiro 源码阅读
- Spring|Spring Security 实现动态权限菜单方案(附源码)
- Linux平台流行病毒解析|Linux平台流行病毒解析 企业用户为主要攻击目标
- Java项目从文本框获取数值_Java编程获取文本框的内容实例解析
- 从零开始实现lmax-Disruptor队列(四)多线程生产者MultiProducerSequencer原理解析
- Bash终端快捷键
- mysql5.6|mysql5.6 解析JSON字符串方式(支持复杂的嵌套格式)
- LinkedList源码深度剖析