一、概述
最近一直在忙着研究 okhttp,看了两周了,感觉东西实在是太多了,如果让我细致的写,我感觉能写 10 篇都写不完,那东西虽然是很多,但是主要的流程我们还是需要了解的,这篇文章我主要介绍以下 okhttp 中的流程,还有一些做的好的东西,之后再去将一些细节上的东西,这篇文章主要说了一个大概的内容,就是帮助你大致了解一下 okhttp 的实现,废话不多说了下面进入正题。
二、异步流程的实现
我们首先看一下网络上面很流行的一张图片,这张图片基本涵盖了一个整个的流程,下面我就对这张图片进行一一的说明:
1、当我们请求的时候会新建一个 RealCall 的对象,创建之后会通过 dispatcher 去在线程池中分配线程,这个 dispatcher 的主要作用就是调度请求,这里面有三个队列,作用分别是存储异步正在运行的任务,存储异步正在准备运行的任务,还有同步运行的队列,通过这个类为我们的任务分配一个线程去运行
2、获取 Response 的过程,我们首先通过递归(index+1 的方式实现递归的)的方式一个一个的加入拦截器,拦截器首先加入的是我们的自定义的拦截器,然后去加框架自己的拦截器,那这几个拦截器的主要功能如下:
1、RetryAndFollowUpInterceptor(负责失败重试,重定向的)
概述:主要的作用就是请求时候创建一个 StreamAllocation 对象,这个对象创建的时候会根据请求的协议不同创建不一样的对象
2、BridgeInterceptor(负责把用户构造的请求转换为发送到服务器的请求、把服务器返回的响应转换为用户友好的响应的)
概述:主要就是把我们的 request 请求加上一些请求头,打包成真正的网络请求的 request,在请求返回的时候,通过 gzip 把我们能的 response 进行压缩
3、CacheInterceptor(负责读取缓存的,如果有缓存就拦截并返回,也负责更新缓存)