开源框架相关面试问题-okhttp网络框架面试问题详解

OkHttp使用简介:

①、准备OkHttpClient对象:

一般app中使用网络可以全部用它,可以将它弄为全局变量,这样就可以共用它的缓存和线程池了。

②、准备Request对象:

很显然它是采用Builder模式来构造成,它封装了请求地址、请求方法、请求头、请求体和标志位信息:

③、发起请求:分为同步请求和异步请求:
同步请求:会阻塞UI线程。

异步请求:也就是不会阻塞UI线程,在子线程中执行的。

 总结:

  • 创建一个OkHttpClient对象。
  • 创建一个Request对象,通过内部类Builder调用生成Request对象。
  • 创建一个Call对象,调用execute【同步请求】 / enqueue【异步请求】。

OkHttp源码剖析:

在分析源码之前先来看一张图:

程序会发一个Request请求给OkHttp的核心层进行处理,而在Okhttp中有一个最重要的概念:拦截器,它会将请求拦截之后再分发response给应用层,大体是这么一个过程。下面先来分析一下同步请求:

由于前两步比较简单,直接分析第三步:

先看一下newCall方法是做了啥事:

实际上是生成了一个RealCall对象,所以最终execute()方法的执行就是在RealCall里面,定位到它:

下面分析一下它的实现:

下面具体来看一下:

这里以CallServerInterceptor拦截器为例进行分析:

所以说它的底层其实也就是用基础的东东来进行封装滴。

接下来再来看一下它的异步请求:

所以进去看一下:

这个类中有三个重要的集合:



下面用图来表示一下其整个过程:

猜你喜欢

转载自www.cnblogs.com/webor2006/p/8996541.html