开源框架相关面试问题-retrofit网络框架面试问题讲解

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对象;
原文地址:https://www.cnblogs.com/webor2006/p/8997381.html