什么是 Retrofit
Atype-safeHTTP client for Android and Java
与 OkHttp 的关系

源码入口
从 retrofit 的使用步骤中,可以知道,retrofit.create(service) 是整个 retrofit 的入口
create函数
create方法中,通过 动态代理 的方式,对传入的service进行代理,并进行一定检查
- 可以看出,
create()会先调用validateServiceInterface(service)进行判断,如果不符合要求,就会报错,这也是保证Retrofit type safe的一个手段
- 通过了类型判断后,就会对其进行动态代理了,从代码可以看出,只代理了我们自定义的方法,而
Object类的方法是不会被代理的
- 最后,根据方法是否是
default方法,进行了不同的调用,需要注意的是,这里的loadServiceMethod(method)里面有个 缓存机制,也是用于获取实际要运行的方法的
validateServiceInterface 函数
- 从代码即注释可以看出,
validateServiceInterface()的作用就跟函数名字一样,主要是用于校验所代理是service是否合理
loadServiceMethod 函数
- 这个方法很短,主要用于返回
ServiceMethod对象,如果cache中有,就直接复用,否则就用ServiceMethod.parseAnnotations(this, method)解析出来一个,因此,核心还是在parseAnnotation()方法上,下面来分析看看
ServiceMethod.parseAnnotations 方法
- 从代码看到,
ServiceMethod.parseAnnotations其实就是通过构造出requestFactory,进而将构造ServiceMethod对象的任务,交给HttpServiceMethod.parseAnnotations()
- 顺便看看
RequestFactory.parseAnnotations(retrofit, method)的源码:
HttpServiceMethod.parseAnnotations 方法
- 可以看到,这个方法,最后会返回一个
CallAdapted(),所以再来看看CallAdapted的定义
CallAdapted 类
CallAdapter 类
- 到这里,其实就能看出,
Retrofit对于网络请求的解析和执行已经结束了,CallAdapter的作用,也是把结果适配成我们接口定义时候的格式而已,所以,整个retrofit网络处理的流程就算是结束了
- 但是,到这里,还是不能体现
Retrofit 是在 OkHttp 基础上进行的封装这个观点,所以,下面再来看看HttpServiceMethod
HttpServiceMethod 类
总体流程
发起请求

响应请求

- 注:以上两张图片引用自 Understand How does Retrofit work,这同样是一篇很不错的文章,里面介绍了整个
Retrofit的大体流程,推荐一起学习
参考/推荐
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/9153ee1f86dc
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts

