retrofit使用简介:
- 在retrofit中通过一个接口作为Http请求的api接口。
注意:@GET("url")中的url只是一个路径,不包含主机号的。 - 创建一个retrofit实例。
- 调用api接口。
retrofit源码剖析:
首先通过Builder模式来创建Retrofit对象,如下:
接着就是将咱们定义的接口转换成实例进行请求,究境它是怎么转换的呢,点击进去查看一下create()方法:
其中会回调invoke()方法,接着最核心的三行代码就出现了:
查看一下loadServiceMethod的具体实现:
再回到主流程来:
这个分析流程跟createCallAdapter()方法类似,就不分析了,回到解析我们api的方法上来:
而看一下adapt()的具体实现:
呃,空的,那肯定在它的子类,其实是在ExecutorCallAdapterFactory类中,然后它里面有个同步也有个异步请求,咱们看下异步请求的细节:
所以最终还是会调用到OkhttpCall的enqueue()方法:
所以~~其实都可以看到retrofit底层实现就是靠okhttp来实现的。
最后对动态代理这块进行总结一下:
- 首先,通过Method把它转换成ServiceMethod;
- 然后,通过serviceMethod,args获取到okHttpCall对象;
- 最后,再把okHttpCall进一步封装并返回Call对象;