深入浅出安卓热门网络框架 OkHttp3 和 Retrofit 原理

作者/分享人:shixinzhang 🌏
向 Ta 提问
长期在 CSDN 上写作,获得“博客专家”称号,公众号“zsx跃迁路”维护者。热爱读书写作,目标是写出有趣的技术书,目前研究方向为前端和移动端。希望可以在这个平台认识更多的朋友。

OkHttp3 是目前安卓开发者使用率较高的基础网络框架,Retrofit 则是在它的基础上进行了更友好的封装。

熟悉它俩的源码和流程不仅可以方便我们在项目中定制,还可以提升我们的基础架构能力,此外在面试中如果你可以对 OkHttp 的源码娓娓道来,同时能对 Retrofit 的封装思路谈的风声水起,面试官一定会被你征服!

因此掌握 OkHttp3 和 Retrofit 实乃安卓开发工程师进阶必备技能。

本场 Chat 将会用生动活泼、清晰易懂的语言和流程图讲解 OkHttp3 和 Retrofit 的源码和流程,让读者一次搞定这两个网络框架,为提升水平、跳槽涨薪增加更多把握。

通过本场 Chat 你将学到如下内容:

  • 发起请求后 OkHttp3 都做了什么?
  • 补充一些网络基础知识;
  • OkHttp3 的多路复用及缓存实现原理;
  • OkHttp3 的核心 API 结构及作用;
  • OkHttp3 中可以学习的架构思想;
  • Retrofit 的主要特定及实现原理;
  • Retrofit 中可以学习的架构思想。

通过这次课程你可以对安卓开发中的网络知识有更深入的掌握和理解!

已有640人预订
预订达标
文章出炉
     
04月23日
05月07日
本场 Chat 文章已出炉,购买后即可阅读文章并获得一张shixinzhang 🌏的读者圈Pass
请务必添加GitChat服务号以查看活动进度及获取活动通知。
查看文章评论/提问
唯^爱
学习了,厉害
。。
博主,最好能讲点okhttp和Retrofit的封装
胖大海
花了一周时间参照源码看完了。5个拦截器,ConnenctInterceptor和CallServerIntercept理解起来有点困难。ConnenctInterceptor主要是ConnectionPool,Connetion,StreamAllocation,Address,Route这几个概念没怎么理清楚。 CallServerIntercept主要是OKIO不熟悉
伯恩山飞
先赞了, 再慢慢细看~
成为海贼王的男人
okhttp的代码比retrofit要复杂好多,不知道楼主看的是哪个版本的,图中有些类应该已经过时了,比如最后的图
shixinzhang 🌏: 你是说 retrofit 还是 okhttp,我看的比较新啊,哪个 API 变了我去瞅瞅。
胖大海
这是okhttp哪个版本的呀,我去看相应的
shixinzhang 🌏: 忘了说了,okhttp 3.10.0, retrofit 2.4.0
A明天----
如何做到静下心来把它看完?看多好多源码的地方就想往下拉?感觉基本会用内部实现就不想去管怎么治?
shixinzhang 🌏: 阅读框架源码大概就三个目的:1.解决问题 2.准备面试 3.装逼 4.学习优秀的代码 如果你没兴趣阅读的话,可能是目前没有这四个需求。 别的不说,但准备面试的话懂框架绝对是加分项,你阅读这么一会儿,有可能给将来多个一两千甚至更多的月薪,这么想想看有没有动力。
胖大海
大大,我有一个建议,就是将每部分涉及到哪些基础知识说一下,这样有心的同学就会去学习相应的基础知识。
innovator琳
耐心地看完了,看到拭心大佬分析的 Retrofit 的动态代理过程真的好详细,当初自己只是简单地分析到了为什么接口能变成一个 Call 对象,没看到里面两个重要的转换器的功能,实在是太年轻了!看完这篇文章补充了我 OKHttp 基础的空白以及加深了 Retrofit 的理解,实在是深度好文,感谢拭心大佬的辛勤劳动成果,感谢感谢!
谨言慎行
扫不了码啊
谨言慎行: 未识别二维码
Turing
今天才看完,觉得okhttp的连接拦截器里面的主要几个类,RealConnection,StreamAllocation,HttpCodec这几个类感觉没讲清楚,看了之后还是很晕乎
你的名字_
好久没见到你了
你的名字_
shixin 源码看排班是不是有问题啊,看着好不舒服
innovator琳
看了第二遍了,觉得对 OKHttp 的创建、网络请求以及拦截链的处理有了更深的理解,同时个人觉得有个地方写错了,还要请大佬确认。 原文在讲解 Retrofit 的创建动态代理对象的地方,有一处「当我们使用 RxJava 时返回值是 Observable,这时的 CallAdapter 的作用就是将 Observable 转换成 OkHttpCall。」 个人觉得应该是说反了,应该是「当我们使用 RxJava 时返回值是 Observable,这时的 CallAdapter 的作用就是将 OkHttpCall 转换成 Observable。」因为这个 adapt(Call call) 的参数是 Call 类型,那么 RxjavaCallAdapter 的 SimpleCallAdapter 应该是将这个 Call 对象转换成 Observable 对象才对。不知道我这么理解是否正确,还请拭心大佬赐教。
你可能还喜欢
如何设计一个灵活的 MySQL 数据表,应对灵活多变的需求
李岩
Jenkins 自动化构建部署实战
火币集团研发中心
Java 程序员应掌握的 Nginx 实战应用
JPM
带你玩转 JSON
能量架构师
实战剖析 Java 秒杀系统的实现
虎口脱险
小程序从入门到进阶
loonglong
微信扫描登录