EventBus

作者: 奔波儿灞_q | 来源:发表于2019-10-29 11:24 被阅读0次

常规的事件传递的比较:

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注解的方法(也是接受通知的方法),查找的方法主要通过反射,并且遍历次数多,

相关文章

网友评论

      本文标题:EventBus

      本文链接:https://www.haomeiwen.com/subject/thfrvctx.html