上一节对OkHttp3做了一个简单的介绍及科普了一下使用。
整体流程:
那么,从这一节开始,进行源码分析解读···
一、创建OkHttpClient对象
OkHttpClient client = new OkHttpClient();
创建时,做了什么事情?
直接进OkHttpClient.java
如果我们不做任何配置,那么就采用默认的配置,已经写好。
|
|
当然,如果自己想设置一些参数:
|
|
个性化配置包你满意。
二、创建网络请求
|
|
这里默认发送的请求是GET:
|
|
发送POST请求,上一章节已经说明了请求方法,源码中实现:
|
|
三、拿到Call对象
|
|
Call即是一个实际的访问请求,用户的每一个网络请求都是一个Call实例。
|
|
一个call就是一次已准备好的请求执行,并且可以被取消。这个请求对象是单个,所以不能执行两次。
实际在执行过程中,OkHttp会为每个请求创建一个RealCall.那么再进RealCall看看。
- 发起一个同步请求
|
|
* 发起同步请求,通过dispatcher.executed()添加到同步队列中执行
* 调用getResponseWithInterceptorChain获取服务器返回
* 最后通知任务分发器client.dispatcher().finished(this)任务结束
- 发起异步请求
|
|
RealCall被转化成一个AsyncCall并被放入到任务队列中,AsyncCall的excute方法最终将会被执行.execute方法的逻辑并不复杂,和之前一样。
四、构建拦截器链
还是在RealCall.java中,看源码是如何构建的。
|
|
- 创建一系列拦截器,并存放在拦截器数组中。
- 然后创建一个拦截器链RealInterceptorChain,执行拦截器链的方法chain.proceed(originalRequest)
- 经过一系列拦截器的处理后,获取Response.
五、小结
本节主要对请求的整个流程进行相对应的源码实现过程解析。
下节对几种拦截器进行解析。