OkHttp使用简介:
①、准备OkHttpClient对象:
一般app中使用网络可以全部用它,可以将它弄为全局变量,这样就可以共用它的缓存和线程池了。
②、准备Request对象:
很显然它是采用Builder模式来构造成,它封装了请求地址、请求方法、请求头、请求体和标志位信息:
③、发起请求:分为同步请求和异步请求:
同步请求:会阻塞UI线程。
异步请求:也就是不会阻塞UI线程,在子线程中执行的。
总结:
- 创建一个OkHttpClient对象。
- 创建一个Request对象,通过内部类Builder调用生成Request对象。
- 创建一个Call对象,调用execute【同步请求】 / enqueue【异步请求】。
OkHttp源码剖析:
在分析源码之前先来看一张图:
程序会发一个Request请求给OkHttp的核心层进行处理,而在Okhttp中有一个最重要的概念:拦截器,它会将请求拦截之后再分发response给应用层,大体是这么一个过程。下面先来分析一下同步请求:
由于前两步比较简单,直接分析第三步:
先看一下newCall方法是做了啥事:
实际上是生成了一个RealCall对象,所以最终execute()方法的执行就是在RealCall里面,定位到它:
下面分析一下它的实现:
下面具体来看一下:
这里以CallServerInterceptor拦截器为例进行分析:
所以说它的底层其实也就是用基础的东东来进行封装滴。
接下来再来看一下它的异步请求:
所以进去看一下:
这个类中有三个重要的集合:
下面用图来表示一下其整个过程: