前言
在上篇文章 Android 注解系列之 EventBus3 原理(四)中我们讲解了 EventBus3 的内部原理,在该篇文章中我们将讲解 EventBus3 中的 “加速引擎”
---索引类。阅读该篇文章我们能够学到如下知识点。
- EventBus3 索引类出现的原因
- EventBus3 索引类的使用
- EventBus3 索引类生成的过程
- EventBus3 混淆注意事项
对 APT 技术不熟悉的小伙伴,可以查看文章 Android-注解系列之APT工具(三)
前景回顾
在 Android 注解系列之 EventBus3 原理(四)中,我们特别指出在 EventBus3 中优化了 SubscriberMethodFinder
获取类中包含 @Subscribe
注解的订阅方法的流程。使其能在 EventBus.register()
方法调用之前就能知道相关订阅事件的方法,这样就减少了程序在运行期间使用反射遍历获取方法所带来的时间消耗。优化点如下图中 红色虚线框
所示:
EventBus 作者 Markus Junginger 也给出了使用索引类前后 EventBus 的效率对比,如下图所示:
从上图中,我们可以使用索引类后,EventBus 的效率有着明显的提升,而效率提升的背后,正是使用了 APT
技术所创建的索引类
。那么接下来我们就来看一看 EventBus3 中是如何结合 APT
技术来进行优化的。
关键代码
阅读过 EventBus3 源码的小伙伴应该都知道,在 EventBus3 中获取类中包含 @Subscribe
注解的订阅方法有两种方式。
- 第一种:是直接在程序运行时反射获取
- 第二种:就是通过索引类。
而使用索引类的关键代码为 SubscriberMethodFinder
中的
getSubscriberInfo() 方法与 findUsingInfo() 方法 。
我们分别来看这两个方法。
findUsingInfo 方法
private List<SubscriberMethod> findUsingInfo(Class<?> subscriberClass) {
FindState findState = prepareFindState();
findState.initForSubscriber(subscriberClass);
while (findState.clazz != null) {
//
以上内容来自于网络,如有侵权联系即删除
相关文章
-
FFmpeg编译:mac下编译iOS平台的FFmpeg库(支持armv7, arm64, i386, x86_64)
-
二 .Flask配置文件
-
C博客作业02--循环结构
-
一些框架图
-
炫酷的卡片动画[译]
-
Android 我的Retrofit+Rxjava封装,不搞花里胡俏
-
Android进阶4:Android的Camera相机开发
-
基于Moya、RxSwift和ObjectMapper实现REST API请求
上一篇: 科学计算库pandas