源码分析--AndroidEventBus(1--register)

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的流程就走完了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文链接:http://blog.csdn.net/u012810020/article/details/7005...
    tinyjoy阅读 567评论 1 5
  • 项目到了一定阶段会出现一种甜蜜的负担:业务的不断发展与人员的流动性越来越大,代码维护与测试回归流程越来越繁琐。这个...
    fdacc6a1e764阅读 3,227评论 0 6
  • 先吐槽一下博客园的MarkDown编辑器,推出的时候还很高兴博客园支持MarkDown了,试用了下发现支持不完善就...
    Ten_Minutes阅读 583评论 0 2
  • EventBus源码分析(一) EventBus官方介绍为一个为Android系统优化的事件订阅总线,它不仅可以很...
    蕉下孤客阅读 4,051评论 4 42
  • title: EventBus 源码分析date: 2017-09-15 09:38:14tags: [Sourc...
    Passon_Fang阅读 236评论 0 0