作为Android开发中使用频率相当高的项目,帮助我们简化了很多复杂场景下的数据传递,当然也是面试中必不可少的问题。
但是对于使用,可能绝大多数人并没有正确的使用它,今天就让我来带大家正确的使用它,并带大家从源代码层面真正搞懂。
EventBus项目地址: https://github.com/greenrobot/EventBus

第一步:注册
注册和反注册操作,需要注意使用确保生命周期步调一致,比如你在中注册,就应该在中反注册。
第二步:设置方法,并添加注解
第三步:使用方法事件
到这里,相信和大家使用的也都是一致的,我见过的大部分项目也都是这么设置的。
但是如果只说这些的话,相信我也就不需要写这篇文章了。
你面试有没有遇到过这样的问题呢?
req:
相信很多背过面试题的肯定能脱口而出,好~,看起来好像很perferct,但是你索引是怎么实现的?而且上面的代码真的是相比2.0代码性能更优化了吗?
如果我告诉你,上面的处理方式,性能相比 更差,不知道你作何感想。直接上图。

这里先放一下正确的使用方式,后面分析完源代码相信大家也就理解了。
在项目或者模块下的文件中添加:
重新rebuild一下代码,会在下生成文件,打开之后发现其实就是我们使用subscribe注解标识过的类。
聪明的你肯定想到了,这里是直接使用,将之前注解的类和方法关系直接生成文件保存在map中了,以后使用应该直接就可以从这里面取了,不再需要反射查找了。至于具体是不是这样,后面源码会说明。
在application中,新增设置
对于实现分析,我们直接根据常用的方法流程进行分析。
2-1、
2-1-1、
- 反射方式
核心查找方法
最后返回查找到的方法集合,并清除缓存池
因为查找方式有两种,分别是反射方式和apt方式,接下来会讲解apt方式,至于查找到时候使用方式,下面也会做说明。
- 优先apt方式,查找不到会反射查找
2-1-2、
下面简单总结下的工作流程
使用,以注册参数作为参数查询是该类里面的所有使用了的方法。
查找逻辑如下:
如果在中找到,则直接返回。找不到的话,则判断是否使用方式在编译期生成,如果没有使用方式,则使用查找。
在查找到之后,则保存在中,并返回后续使用。
之后对于查找到的注解的方法集合进行遍历,并以方法的参数作为key,所有使用了该方法参数的方法集合作为value,保存在中。
进行了一顿操作,其实核心思想就是对当前注册的类里面的所有的注解的方法,以(也就是参数)作为key,对代码中所有的找到的类里面使用该事件对象的注解方法进行一个统计到一个集合中,方便后续的时候进行事件的分发。其实就是一个非常典型的模式,也可以说是。
2-2、
这里的逻辑比较简单,有了上面方法中的分析,相信这个很容易就看懂了,就不多说明了
下面对于方法做一下简单的总结:
这里用到两个map集合和
- 集合实际上就是保存了下面所有的集合,其中key是使用类,value就是事件集合。
- 是保存的所有的象的方法集合,事件和方法是。
操作就是将方法中找到的、,进行一个清理,。
因为篇幅原因,、粘性消息等内容,将拆分到另一篇文章中
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/6771.html