美文网首页
源码分析--AndroidEventBus(1--registe

源码分析--AndroidEventBus(1--registe

作者: waitingal | 来源:发表于2016-09-06 11:23 被阅读0次

    Android事件库中使用者最多的应该是EventBus 和 Otto了,而选择AndroidEventBus 
    的原因就是使用起来简单,顺手。具体的用法可看该库的作者的Github.

    先看看AndroidEventBus库的项目源码结构,共14个类,简洁而强大。

    1

    一般事件订阅注册流程

          接收事件之前,我们都需要调用EventBus.getDefault().register(Object) 注册为订阅者。EventBus是整个事件库的入口,也是这个库的核心类,所有的操作都需用到。

    既然事件发生之前都需调用register(Object),那么就从这个方法开始查看代码。

    public voidregister(Object subscriber) {

    if(subscriber ==null) {

    return;

    }

    synchronized(this) {

    mMethodHunter.findSubcribeMethods(subscriber);

    }

    }

    这里除空判断外只执行 mMethodHunter.findSubcribeMethods(subscriber);

    那么mMethodHunter 是什么鬼?findSubcribeMethods中又做了什么?

    首先找出mMethodHunter在EventBus的实例化代码

    SubsciberMethodHunter mMethodHunter=new  SubsciberMethodHunter(mSubcriberMap);

    可以看到实例化mMethodHunter的时候,传了一个mSubcriberMap,看名字我们知道这个是一个键对值的集合。 继续找出mSubcriberMap的实例化代码。

    2

    可以看到 这个mSubcriberMap 是一个以 EventType为键,Subscription类型的list集合为值。那EventType 和 Subscription 又是什么东东呢?接着查看这两个类的代码。

    3

    从EventType类的作者注释和这个类的成员变量可以看出 EventType 主要是包含事件发生后所执行的方法所对应的tag和方法的参数类型。

    4

    Subscription主要包含:

    subscriber:订阅者对象(即调用register(Object)时,传入的Object,这里我们可以理解为activity或者fragment )

    targetMethod:执行方法(即事件发生后需要调用的方法)

    threadMode:执行方法所属的线程类型

    eventType:就是刚才上面查看的EventType对象(保存执行方法对应的tag和参数类型)

    Subscription的构造函数中,需要传入subscriber(订阅者对象)和 TargetMethod。

    再查看TargetMethod的代码:

    5

    TargetMethod中包含:

    method:事件执行方法

    eventType:就是刚才上面查看的EventType对象(保存执行方法对应的tag和参数类型)

    threadMode:执行方法所属的线程类型

    Subscription,TargetMethod和EventType 有什么关系呢?这里我脑补一张图:

    6

    介绍完以上的类后,回调register方法,调用了

    mMethodHunter.findSubcribeMethods(subscriber)

    findSubcribeMethods方法代码:

    7 8

    findSubcribeMethods方法主要就是获取订阅者以及其父类里所有带有Subscriber注解的方法,并获取这些方法的参数类型类,以及注解的tag和线程类型,并保存到EventBus的mSubcriberMap中,这样register的流程就走完了

    相关文章

      网友评论

          本文标题:源码分析--AndroidEventBus(1--registe

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