内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

Okhttp Interceptor源码解析

2018-08-04 18:06 出处:清屏网 人气: 评论(0

image10.png

添加拦截器

image11.png

image12.png

这样添加到源码中的 OkHttpClient 类集合中。

image13.png

RealCall类中

下面以Call的同步方法execute()为例子

image14.png

在RealCall类中,进行拦截器的所有添加

image15.png

添加完之后,调用RealInterceptorChain类中的 proceed()方法进行拦截器处理

image16.png

image17.png

这个方法就是循环递归的重要方法,做拦截器处理,因为每次进入一个拦截器都会把RealInterceptorChain这个对象传递过去

image24.png

在回调给这个对象进行循环递归

这面举一个 HttpLoggingInterceptor 拦截器为例

假设他是集合里面的index为0的拦截器

Response response = interceptor.intercept(next);

当调用这个方法的时候,会去调用 HttpLoggingInterceptor里面的

image18.png

这面其实就是HttpLoggingInterceptor的

public Response intercept(Chain chain) 这个方法里面的代码

response = chain.proceed(request);

当调用这个的时候会在一次走到

image20.png

image19.png

这个RealInterceptorChain 类里面的这个方法里面进行 index+1

循环递归,

对于request的拦截器处理

image21.png

会把新的请求给下一个拦截器保持最新的请求.

就好比请求头,因为每add一个拦截器都会拿上一个拦截器的request,如果有拦截器处理请求则去处理request去改变request

所以说最终的request是最完美的request

最终把请求给到CallServerInterceptor

拦截器中,也就是循环递归

image22.png

CallServerInterceptor 里面的 Response intercept(Chain chain)

image23.png

通过request拿到请求的response

返回给每一个拦截器进行reponse处理。

分享给小伙伴们:
本文标签: InterceptorOkhttp

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号