常规的事件传递的比较:
1.Intent 意图,跳转+参数, 缺点:局限性非常大
2.Handler,通常用来再主线程更新UI,若使用不当容易出现内存泄露
3.Interface.仅限于再同一线程数据交互
4.BroadCastReceiver 重量级的控件,消耗资源较多.
EventBus,安卓时间总线框架,各个组建之间的交互,使用EventBus可以快速的达到通知的效果,调度灵活使用简单,快捷轻量.
缺点
难以追溯事件源,缺乏唯一可信源的理念约束
使用
3.0版本后的使用方式, 比旧版本的多配置了2步
1.导入包,配置注解处理器生成的文件目录
//配置注解处理器
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [ eventBusIndex : 'com.example.myapp.MyEventBusIndex' ]
}
}
}
}
//导入包
dependencies {
implementation 'org.greenrobot:eventbus:3.1.1'
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'
}
再配置完成之后,再编译之后会在app model目录/build/generated/source/apt/develop/debug/com.example.myapp 下会自动生生成MyEventBusIndex文件
public class MyEventBusIndex implements SubscriberInfoIndex {
private static final Map<Class<?>, SubscriberInfo> SUBSCRIBER_INDEX;
static {
SUBSCRIBER_INDEX = new HashMap<Class<?>, SubscriberInfo>();
}
private static void putIndex(SubscriberInfo info) {
SUBSCRIBER_INDEX.put(info.getSubscriberClass(), info);
}
@Override
public SubscriberInfo getSubscriberInfo(Class<?> subscriberClass) {
SubscriberInfo info = SUBSCRIBER_INDEX.get(subscriberClass);
if (info != null) {
return info;
} else {
return null;
}
}
}
2.将注解处理器自动生成的文件添加到EventBus中
EventBus eventBus = EventBus.builder().addIndex(new MyEventBusIndex()).build();
EventBus 新版本的优势
3.0之后的版本主要是使用了注解处理器机制,完成注解方法的查找,运行后,带有@Subscribe的类和方法的信息都存再MyEventBusIndex类中的静态变量中,查找起来更快捷
3.0之前的版本,依赖注册的类,通过注册的类,遍历该中的方法,找到带有@Subscribe注解的方法(也是接受通知的方法),查找的方法主要通过反射,并且遍历次数多,
网友评论