okhttp初识拦截器

拦截器流程:网络

简单回顾同步 / 异步:异步

同步请求就是执行请求的操做是阻塞式,直到HTTP响应返回。spa

异步请求就相似于非阻塞式的请求,它的执行结果通常都是经过接口回调的方式告知调用者。 3d

okHttp拦截器:blog

来自官网的解释:拦截器是OkHttp中提供一种强大的机制,它能够实现网络监听、请求以及响应重写、请求失败重试等功能。接口

下面来看一下官网的一张介绍拦截器的图:同步

其中Okhttp包含Application Interceptors【应用拦截器】、系统拦截器、Network Interceptors【网络拦截器】,其中我们接下来要分析的就是从系统自带的拦截器开始,那系统拦截器都有哪些呢,以下图:源码

关于这些系统拦截器在接下来会一一进行详细分析的,目前先有个大体的印象。io

拦截器链介绍:循环

有了上面的理论了解以后,下面则从源码的角度来对拦截器进行一个进一步了解,这里以同步请求为例,由于异步请求关于拦截器这块基本上同样:

进一步定位:

那接下来将注意力集中在RealInterceptorChain.proceed()方法中:

而后此时在这个方法中有个核心代码:

这样就将若干个拦截器以链式的方式进行执行,这也是拦截器链的主要做用。下面总结一下拦截器:

一、建立一系列的拦截器,并将其放入到一个拦截器list中。

二、建立一个拦截器链RealInterceptorChain,并执行拦截器链的proceed方法。

那目前对于拦截器怎么链起来的有了一个大局观,那到底每一个拦截器是怎么来衔接的呢?这里以一个具体的拦载器为例初步进行分析:RetryAndFollowUpInterceptor:

因此将目光集中在这个方法之上,代码比较多,这里先只看核心的:

而如以前所分析,咱们知道RealInterceptorChain在proceed()方法中又会去获取下一个拦截器继续往下链,以下:

如此循环,就会将全部的拦截器依顺序一个个去执行完成,这也就是拦截器的一个核心实现逻辑。因此下面对拦截器的具体逻辑再总结一下:

一、在发起请求前对request进行处理。

二、调用下一个拦截器,获取response。

三、对response进行处理,返回给上一个拦截器。

相关文章
相关标签/搜索