【EventBus】EventBus 源码解析 ( 注册订阅者总结 | EventBus 注册订阅者流程梳理 )

简介: 【EventBus】EventBus 源码解析 ( 注册订阅者总结 | EventBus 注册订阅者流程梳理 )

文章目录

EventBus 注册订阅者流程梳理





EventBus 注册订阅者流程梳理


EventBus 注册订阅者流程梳理 :


① 在 客户端 调用 EventBus.getDefault().register() 方法 , 启动订阅者注册行为 ; 在该方法中先查找 订阅方法 集合 , 然后遍历并注册订阅方法 ; EventBus 注册订阅者


② 查找 订阅方法 集合 , 在 findSubscriberMethods 方法中进行查找 , 这里还涉及到缓存机制 , 如果是第一次查找 , 将查找到的订阅方法都封装到 METHOD_CACHE 集合中 , 之后便从该集合中获取 订阅方法 ;

查找订阅方法 findSubscriberMethods 方法


③ 在 findUsingReflectionInSingleClass 方法中 , 通过反射获取订阅者类中的所有方法 , 遍历 订阅者 类中的所有方法 , 过滤掉不符合条件的方法 , 将符合条件的方法封装到 findState.subscriberMethods 集合中 , 该集合的原型是 List<SubscriberMethod> subscriberMethods ; 查找订阅方法 findUsingReflectionInSingleClass


④ 遍历上述得到的 List<SubscriberMethod> subscriberMethods 订阅方法集合


⑤ 将 订阅方法 所在的 订阅者对象 , 和 订阅方法 , 封装到 Subscription 类中 , 每个 Subscription 类中只能封装 1 11 个订阅者对象和 1 11 个订阅方法 ; 注册订阅方法的具体过程


将上述封装的 放到 Map<Class<?>, CopyOnWriteArrayList<Subscription>> subscriptionsByEventType 成员变量中 , Key 是订阅方法接收的事件类型 , Value 是 Subscription 集合 , 每个 Subscription 中封装了一个订阅者对象和一个订阅方法 ;


该 subscriptionsByEventType 成员变量的作用是可以在发送消息时 , 可以快速找到接收消息的订阅方法 ;


⑥ 将 订阅者对象 和 订阅方法参数类型集合 放到 Map<Object, List<Class<?>>> typesBySubscriber 成员变量中 , 其中 Key 是订阅者对象 , Value 是订阅方法参数类型集合 , 每个元素都是一个订阅方法的参数 , 这些订阅方法都在订阅者对象中 ; 注册订阅方法的具体过程


该 typesBySubscriber 成员变量 的作用是在取消订阅时 , 可以根据订阅者对象 , 找到所有的订阅方法 ;

image.png

目录
相关文章
|
7天前
yolo-world 源码解析(六)(2)
yolo-world 源码解析(六)
18 0
|
7天前
yolo-world 源码解析(六)(1)
yolo-world 源码解析(六)
12 0
|
8天前
yolo-world 源码解析(五)(4)
yolo-world 源码解析(五)
19 0
|
8天前
yolo-world 源码解析(五)(1)
yolo-world 源码解析(五)
31 0
|
8天前
yolo-world 源码解析(二)(2)
yolo-world 源码解析(二)
21 0
|
8天前
Marker 源码解析(二)(3)
Marker 源码解析(二)
13 0
|
8天前
Marker 源码解析(一)(4)
Marker 源码解析(一)
12 0
|
8天前
Marker 源码解析(一)(2)
Marker 源码解析(一)
17 0
|
8天前
PokéLLMon 源码解析(六)(4)
PokéLLMon 源码解析(六)
12 0

推荐镜像

更多