继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Okhttp Interceptor 源码解析

慕姐8265434
关注TA
已关注
手记 1283
粉丝 222
获赞 1065

webp

image10.png

添加拦截器


webp

image11.png


webp

image12.png


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


webp

image13.png


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

webp

image14.png


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


webp

image15.png


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

webp

image16.png

webp

image17.png


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


webp

image24.png


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

这面举一个 HttpLoggingInterceptor 拦截器为例
假设他是集合里面的index为0的拦截器
Response response = interceptor.intercept(next);
当调用这个方法的时候,会去调用 HttpLoggingInterceptor里面的


webp

image18.png


这面其实就是HttpLoggingInterceptor的
public Response intercept(Chain chain) 这个方法里面的代码
response = chain.proceed(request);
当调用这个的时候会在一次走到


webp

image20.png


webp

image19.png


这个RealInterceptorChain 类里面的这个方法里面进行 index+1
循环递归,

对于request的拦截器处理


webp

image21.png


会把新的请求给下一个拦截器保持最新的请求.
就好比请求头,因为每add一个拦截器都会拿上一个拦截器的request,如果有拦截器处理请求则去处理request去改变request
所以说最终的request是最完美的request
最终把请求给到CallServerInterceptor
拦截器中,也就是循环递归


webp

image22.png


CallServerInterceptor 里面的 Response intercept(Chain chain)

webp

image23.png

通过request拿到请求的response
返回给每一个拦截器进行reponse处理。



作者:MrLgc
链接:https://www.jianshu.com/p/8671f44a237f


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP