老司机狂飙之路--EventBus原理简要分析

一、前言

正式开始之前,咱先说一说上一篇,说到的索引类,点进去查看,如是:

/** This class is generated by EventBus, do not edit. */

public class MyEventBusIndex implements SubscriberInfoIndex {

    private static final Map<Class<?>, SubscriberInfo> SUBSCRIBER_INDEX;

    static {

        SUBSCRIBER_INDEX = new HashMap<Class<?>, SubscriberInfo>();

        putIndex(new SimpleSubscriberInfo(MainActivity.class, true, new SubscriberMethodInfo[] {
            new SubscriberMethodInfo("onMessageEvent", cn.akitaka.www.textcode.event.MessageEvent.class,
                    ThreadMode.POSTING, 1, true),
        }));
    }

    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;
        }
    }
}

一步一步分析:首先它是实现SubscriberInfoIndex接口 ,在addIndex方法中的参数,看看具体实现:

使用Map保存 SubscriberInfo,即所有订阅者的接受方法,然后 接口内定义的方法getSubscriberInfo,通过subscriberClass(key订阅者)去获得SubscriberInfo (value,也就是订阅方法集合);通俗的讲呢 就是以订阅者为单位,将订阅者类所有的订阅函数及相关参数,封装到SimpleSubscriberInfo中去了,方便EventBus在注册过程中使用;声明下SimpleSubscriberInfo是在编译时候生成的,这样运行的时候可直接用,省去了运行中反射操作的资源和时间消耗,高效运行!

走到这,突然多出个问题,他的生成过程呢?其实根据build.gradle的配置可以看出点端倪;

首先明确的是MyEventBusIndex是通过第三方的那个android-apt或者Gradle本身提供的annotationProcessor,与EventBus提供的 EventBusAnnotationProcessor合体,协同生产出的玩意, E

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝麻粒儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值