亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Okhttp Interceptor 源碼解析

標簽:
Java

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


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消