EvenBus 注册源码分析

我们先从注册的方法开始看起



单例模式  用于返回对象实例 接着进入注册的方法



首先获取订阅的类 然后通过subscriberMethodFinder.findSubscriberMethods()这个方法找到SubscriberMethod这个类的实例我们可以先进入.findSubscriberMethods()这个方法看下  首先是从缓存的一个集合中获取  然后判断缓存中是否有SubscriberMethod的缓存 (防止多次创建) ignoreGeneratedIndex这个标志 表示是否忽略 注解器生成的EventBusIndex 默认为False   FalsefindUsingReflection(subscriberClass);这个方法主要是用过反射去拿到subscriberMethods  而findUsingInfo(subscriberClass); 需要使用要编译时注解生成的MyEventBusIndex类中获取订阅方法  通常默认为空 这两个方法先不详细讲然后遍历subscribe(subscriber, subscriberMethod); 这个方法 我们可以进去看下




我们先从参数分析 第一个Object参数 是一个注册的那个类 第二的是一个重新生成的subscriberMethod  然后往下继续看

eventType是代表着。POST()方法里面的参数 然后它又封装了 一个Subscription对象 传入注册类 及已经解析好的subscriberMethod   下一句代码  是从一个MAP集合里面获取一个CopyOnWriteArrayList  KEY就是POST方法的那个参数

然后进行判空 如果为空就重新创建一个CopyOnWriteArrayList 然后把这个event 参数 和它一起放subscriptionsByEventType这个集合当中 否则则跑出异常  下一行代码是获取subscriptions 的长度    然后遍历这个subscriptions这个集合 针对优先级 进行排序 然后对注册类的所有参数方法和对应订阅对象 重新封装成一个类(主要是为了 解除注册用)  然后下面的就是处理粘性事件的代码 暂时略过       这次源码分析就到此为止                                                              

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • EventBus基本使用 EventBus基于观察者模式的Android事件分发总线。 从这个图可以看出,Even...
    顾氏名清明阅读 3,828评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,107评论 19 139
  • 项目到了一定阶段会出现一种甜蜜的负担:业务的不断发展与人员的流动性越来越大,代码维护与测试回归流程越来越繁琐。这个...
    fdacc6a1e764阅读 8,452评论 0 6
  • EventBus源码理解 EventBus是我们在开发中经常使用的开源库,使用起来比较简单,而且源码看起来不是很吃...
    崔老板阅读 1,810评论 0 2
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,887评论 1 32

友情链接更多精彩内容