如何读源码
三部曲:
- 寻找切入点,带着将源码整体化,结构化的意识,开始阅读
- 从切入点开始将代码一小步一小步的进行模块化的记忆
- 遇到无法切入时,可以先切换到另一个小模块进行挖掘
- 建议的切入点:使用中最接近逻辑开始的地方。如网络请求框架的开始请求的地方:retrofit2.Call.enqueue
- 阅读的过程中,时刻保持将代码尽心体系化,完整化的意识
- 每次将小模块完成之后,再进行下一个小块的完善,直到心中有一个完整的整体模块
- 时刻保持一个明确的目的进行阅读
- 阅读的过程中可能会出现需要纵向深入和横向发散的情况,这个时候就需要明确一个方向阅读
Retrofit源码笔记
关键类:
- retrofit2.Retrofit 总体配置:如CallAdapter、Converter等
- java.lang.reflect.Proxy:动态代理
- ServiceClass,使用Retrofit定义网络请求的接口,需要通过动态代理实现(提示:源码有标注这是个啥)
- ServiceMethod,Retrofit解析接口得出的网络请求构建类(提示:源码有标注这是个啥)
- 解析出ServiceClass的所有网络请求方法
- 转换网络请求的返回
- 切换网络请求和返回数据的线程
- CallAdapter 配置网络请求,切换线程
- Converter 用于转换网络请求的返回为需要的类型
示例源码:
class MainActivity : AppCompatActivity() {
val TAG = "MainActivity"
val permissionRequestCode = 1
override fun onCreate(savedInstanceState: Bundle?)