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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 【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

目录
相关文章
|
19天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
39 0
|
19天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
29 0
|
19天前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
33 0
|
17天前
|
存储
让星星⭐月亮告诉你,HashMap的put方法源码解析及其中两种会触发扩容的场景(足够详尽,有问题欢迎指正~)
`HashMap`的`put`方法通过调用`putVal`实现,主要涉及两个场景下的扩容操作:1. 初始化时,链表数组的初始容量设为16,阈值设为12;2. 当存储的元素个数超过阈值时,链表数组的容量和阈值均翻倍。`putVal`方法处理键值对的插入,包括链表和红黑树的转换,确保高效的数据存取。
39 5
|
14天前
|
域名解析 网络协议
非阿里云注册域名如何在云解析DNS设置解析?
非阿里云注册域名如何在云解析DNS设置解析?
|
18天前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
18天前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
18天前
|
JavaScript 调度
Vue事件总线(EventBus)使用指南:详细解析与实战应用
Vue事件总线(EventBus)使用指南:详细解析与实战应用
33 1
|
14天前
|
敏捷开发 数据可视化 测试技术
解析软件项目管理:以板栗看板为例,其如何有效影响并优化软件开发流程
软件项目管理是一个复杂而重要的过程,涵盖了软件产品的创建、维护和优化。其核心目标是确保软件项目能够顺利完成,同时满足预定的质量、时间和预算目标。本文将深入探讨软件项目管理的内涵及其对软件开发过程的影响,并介绍一些有效的管理工具。
|
19天前
|
算法 Java 程序员
Map - TreeSet & TreeMap 源码解析
Map - TreeSet & TreeMap 源码解析
29 0

推荐镜像

更多