学会这篇OkHttp,花了我一个通宵,也是值了!

引子

OkHttp 知名第三方网络框架SDK,使用简单,性能优秀,但是内核并不简单,此系列文章,专挑硬核知识点详细讲解。何为硬核,就是要想深入研究,你绝对绕不过去的知识点。

TIPS:声明:拦截器种细节太多,要一一讲解不太现实,所以我挑了其中最实用的一些要点加以总结。

详细讲解 OKHttp的核心内容,拦截器。不过拦截器众多,有系统自带的,也有我们可以自己去自定义的。

大家可以先看首篇-你必须学会的OKHttp
顺手留下GitHub链接,需要获取相关面试或者面试宝典核心笔记PDF等内容的可以自己去找
https://github.com/xiangjiana/Android-MS

更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取


这是网络请求执行的核心方法的起点,这里涉及了众多拦截器。

正文大纲
系统自带拦截器

1 重试与重定向拦截器 RetryAndFollowUpInterceptor
2 桥接拦截器
3 缓存拦截器 CacheInterceptor
4 连接拦截器 ConnectInterceptor
5 服务调用拦截器 CallServerInterceptor

正文

在详解拦截器之前,有必要先将 RealCallgetResponseWithInterceptorChain() 方法最后两行展开说明:

  Interceptor.Chain chain = newRealInterceptorChain( interceptors, null, null, null, 0, originalRequest);
  return chain.proceed(originalRequest);

这里最终返回 一个 Response,进入 chain.proceed方法,最终索引到 RealInterceptorChain的 proceed方法:

之后,我们追踪这个 interceptor.intercept(next); ,发现是一个接口,找到实现类,有多个,进入其中的 RetryAndFollowUpInterceptor,发现:

它这里又执行了 chain.proceed,于是又回到了 RealInterceptorChain.proceed()方法,但是此时,刚才链条中的拦截器已经不再是原来的拦截器了,而是变成了第二个,因为每一次都 index+1了(这里比较绕,类似递归,需要反复仔细体会),依次类推,直到所有拦截器的intercept方法都执行完毕,直到链条中没有拦截器。就返回最后的 Response

这一段是 okhttp责任链模式的核心,应该好理解

系统自带拦截器
1. 重试与重定向拦截器 RetryAndFollowUpInterceptor

先说结论吧:

顾名思义,retry 重试,FollowUp 重定向 。这个拦截器处在所有拦截器的第一个,它是用来判定要不要对当前请求进行重试和重定向的,
那么我们应该关心的是: 什么时候重试, 什么时候重定向。并且,它会判断用户有没有取消请求,因为RealCall中有一个cancel方法,可以支持用户 取消请求(不过这里

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值