之前国庆假期想着闲着也是闲着,就想着来深入了解下几个常用的开源库😁😁,看下其实现原理和源码,进行总结并输出成一份PDF资源。现已总结了 EventBus、ARouter、LeakCanary、Glide、Coil、Retrofit、OkHttp 等几个。
主要整理成了以下十个模块:
三方库源码笔记(1)-EventBus 源码详解
三方库源码笔记(2)-EventBus 自己实现一个?
三方库源码笔记(3)-ARouter 源码详解
三方库源码笔记(4)-ARouter 自己实现一个?
三方库源码笔记(5)-LeakCanary 源码详解
三方库源码笔记(6)-LeakCanary 扩展阅读
三方库源码笔记(7)-超详细的 Retrofit 源码解 析
三方库源码笔记(8)-Retrofit 与 LiveData 的 结合使用
三方库源码笔记(9)-超详细的 Glide 源码详解
三方库源码笔记(10)-Glide 你可能不知道的知 识点
1.EventBus 源码详解
我们知道,EventBus 在有消息被发送出来时,可以直接为我们回调该消息的所有监听方法,回调操作是通过反射 method.invoke 来实现的。那么 EventBus 在回调之前也必须先拿到所有的监听方法才行,这样才知道该消息类型对应什么监听方法以及对应多少监听方法。
主要内容:
- 注册
- 发送消息
- 解除注册
- 注解处理器
- 一些坑
2.自己实现一个EventBus
对于一个优秀的第三方库,开发者除了要学会如何使用外,更有难度的用法就是去了解实现原理、懂得如何改造甚至自己实现。接下来就来自己动手实现一个 EventBus,不求功能多齐全,就来实现简单的注册、反注册、发送消息、接收消息这些功能即可😁😁
主要内容:
- 需要做什么
- 注解处理器
- EasyEventBus
3.ARouter 源码详解
路由框架在大型项目中比较常见,特别是在项目中拥有多个 moudle 的时候。为了实现组件化,多个 module 间的通信就不能直接以模块间的引用来实现,此时就需要依赖路由框架来实现模块间的通信和解耦:sunglasses:
而 ARouter 就是一个用于帮助 Android App 进行组件化改造的框架,支持模块间的路由、通信、解耦。
主要内容:
- 初始化
- 跳转到 Activity
- 跳转到 Activity 并注入参数
- 控制反转
- 拦截器
- 注解处理器
4.自己实现一个ARouter
对于一个优秀的第三方库,开发者除了要学会如何使用外,更有难度的用法就是去了解实现原理、懂得如何改造甚至自己实现。接下来就自己动手实现一个路由框架,因为自己实现的目的不在于做到和 ARouter 一样功能完善,而只是一个练手项目,目的是在于加深对 ARouter 的原理理解,所以自己的自定义实现就叫做 EasyArouter 吧 😁😁
主要内容:
- 前置准备
- 注解处理器
- EasyRouter
5.LeakCanary 源码详解
LeakCanary是由 Square 公司开源的用于 Android 的内存泄漏检测工具,可以帮助开发者发现内存泄露情况并且找出泄露源头,有助于减少 OutOfMemoryError
情况的发生。在目前的应用开发中也算作是性能优化的一个重要实现途径,很多面试官在考察性能优化时都会问到 LeakCanary 的实现原理。
主要内容:
- 支持的内存泄露类型
- 初始化
- ObjectWatcher:检测任意对象
- ActivityDestroyWatcher:检测 Activity
- FragmentDestroyWatcher:检测 Fragment
- ViewModelClearedWatcher:检测 ViewModel
- 检测到内存泄露后的流程
6.LeakCanary 扩展阅读
Java 的一个很显著的优点就在于内存自动回收机制,Java 通过垃圾收集器(Garbage Collection,GC)来自动管理内存的回收过程,而无需开发者来主动释放内存。这种自动化行为有效地节省了开发人员的开发成本,但也让一些开发者误以为 Java 就不存在内存泄漏的问题了,或者是误认为内存泄露应该是 GC 或者 JVM 层面来关心和解决的问题。这种想法是不正确的,因为内存泄露大多时候是由于程序本身存在缺陷而导致的,GC 和 JVM 并无法精准理解程序的实现初衷,所以还是需要由开发人员来主动解决问题。
主要内容:
- 内存泄露和内存溢出
- 内存管理
- 常见的内存泄露
7.超详细的 Retrofit 源码解析
Retrofit 也是现在 Android 应用开发中的标配之一了,今天就来对 Retrofit 进行一次(自我感觉的)全面的源码解析。
主要内容:
- Retrofit.create()
- ServiceMethod
- HttpServiceMethod
- OkHttpCall
- API 方法是如何解析的?
- ResponseBody 是如何映射为 UserBean 的?
- Call 是如何替换为 Observable 的?
- 整个数据转换流程总结
- 如何实现以 Kotlin 协程的方式来调用?
- Retrofit 对 Android 平台做了什么特殊支持?
8.Retrofit 与 LiveData 的 结合使用
我们在搭建项目的网络请求框架的时候,一个重要的设计环节就是要避免由于网络请求结果的异步延时回调导致内存泄漏情况的发生,所以在使用 RxJava 的时候我们往往是会搭配 RxLifecycle 来一起使用。而 Google 推出的 Jetpack 组件一个很大的亮点就是提供了生命周期安全保障的 LiveData。
LiveData 是基于观察者模式来实现的,也完全符合我们在进行网络请求时的使用习惯。所以,本篇文章就来动手实现一个 LiveDataCallAdapter,即实现以下方式的网络请求回调。
主要内容:
- 基础定义
- LiveDataCallAdapter
9.超详细的 Glide 源码详解
Glide 的源码有点复杂,所以换个思路来看源码:以小点来划分,每个小点只包含 Glide 实现某个功能或目的时所涉及的流程,以此来简化理解难度,通过整合多个小的功能点来把控住 Glide 大的实现方向。
主要内容:
- 前置准备
- 如何监听生命周期
- 怎么注入 Fragment
- 如何启动加载图片的任务
- 加载图片的具体流程
- 如何分辨不同的加载类型
- 一共包含几个线程池
- 如何自定义网络请求库
- 内存清理机制
10.关于Glide 你可能不知道的知识点
主要内容:
- 利用 AppGlideModule 实现默认配置
- 自定义网络请求组件
- 实现图片加载进度监听
- 自定义磁盘缓存 key
- 如何直接拿到图片
- Glide 如何实现网络监听
完整目录:
现在都说互联网寒冬,其实只要自身技术能力够强,咱们就不怕!
资料太多,全部展示会影响篇幅,暂时就先列举这些部分截图,以上资源均免费分享,以上内容均放在了开源项目:【github】 中已收录,大家可以自行获取(或者关注主页扫描加微信获取)。
网友评论