Retrofit源码解析之请求流程概述
Retrofit之Converter简单解析
Retrofit之OkhttpCall执行原理详解
Retrofit之CallAdapter简单解析

基本上读完上面的几篇博文应该可以对Retrofit的核心原理做一个了解,本篇是对前面几篇博文的总结,从整体上来说明Retrofit的结构:

相信很多开发者在使用Okhttp的时候也对其进行过封装,github上也能搜到不少Okhttp封装的源码;总的来看Retrofit是Okhttp的二次封装。其实不论怎么封装,封装的核心只不过是对Request和Response的构建做一个相应的变化而已,到头来真正执行网络请求的还是Okhttp的Call对象:同步请求为call.execute();异步请求为call.enqueue();那么Retrofit对Okhttp做了怎么的封装设计呢?

其实Retrofit从整体上看主要添加了两个接口集合:

   .addConverterFactory(GsonConverterFactory.create(initGsonConverter()))// Converter集合.addCallAdapterFactory(RxJavaCallAdapterFactory.create()) //CallAdapter集合

其中两个集合的作用通过下图可以直观的表达出来:

也即是说api方法的返回值类型决定了使用哪一个CallAdapter,而返回值所包含的泛型的真实类型决定了使用哪一个Converter。
或者说每个Api方法的返回类型都需要一个CallAdapter对象和一个Converter与之对应。且每一个API方法都对应封装成一个ServiceMethod对象,所以下图就不难理解了:

具体是怎么从上面两个集合中检索的所需的CallAdater和Converter对象的,详细过程可以参看Retrofit之Converter简单解析和Retrofit之CallAdapter简单解析两篇博文。

而Retrofit的扩展性也主要体现在CallAdapter和Converter两个接口的实现而已,比如Retrofit的内部就提供了如下CallAdapter:

和如下几个Converter

所以结合上面的讲解Retrofit的整体流程图就出炉了:

到此为止Retrofit源码分析讲解完毕,如有不当之处欢迎评指正

Retrofit工作原理总结相关推荐

  1. 深入理解Kotlin协程suspend工作原理(初学者也能看得懂)

    1. 概述 挂起函数是Kotlin协程最重要的一个特性,所有其他概念都建立在它的基础上.所以我们需要深入了解它的工作原理. 挂起协程意味着在中间停止它.这类似于玩游戏,当我们想暂停游戏时,可以先存档, ...

  2. Retrofit2 工作原理解析(一)

    Retrofit2 工作原理解析(一) 概述 Retrofit是square公司开源的一款类型安全的http请求框架,用于Java和Android程序.Retrofit可以说是restful风格的一个 ...

  3. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  4. 深入理解Nginx工作原理

    1 反向代理 1.1 概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给intern ...

  5. 高频开关电源原理_程控开关电源的工作原理

    本文介绍了开关电源的工作原理以及它的特点. 程控开关电源要要比线性电源复杂得多. 下图是典型的开关电源工作原理图. 首先对 220 V/50Hz 的 AC 输入,通过桥式整流器进行整流 储能电容对整流 ...

  6. Servlet生命周期与工作原理

    Servlet生命周期分为三个阶段: 1,初始化阶段  调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...

  7. java的工作原理你知道吗_每天用Mybatis,但是Mybatis的工作原理你真的知道吗?

    近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了. 核心部件:SqlSession Executor Stat ...

  8. linux网络管理原理,Linux__网络管理(物理层 数据链路层 网络层工作原理)

    千锋云计算逆战班11点后打卡 今天学习后,进行复习下,物理层 数据链路层  网络层 的工作原理 物理层关心的两件事情:1.信号 2.介质 先说信号:信号分为模拟信号和数字信号 模拟信号: 模拟信号,不 ...

  9. HDD工作原理 导图

    以上导图介绍了我们使用的 (HDD)机械硬盘的基本构造以及核心工作原理,对于大家扫盲有所帮助 参考文档: https://blog.csdn.net/yizhaoxin/article/details ...

  10. 路由和交换机工作原理

    路由器与交换机的工作原理 计算机网络往往由许多种不同类型的网络互连连接而成.如果几个计算机网络只是在物理上连接在一起,它们之间并不能进行通信,那么这种"互连"并没有什么实际意义.因 ...

最新文章

  1. P1977 出租车拼车
  2. hasp运行不成功_国内首条ZA-PPV电缆成功运行50天 新电缆有啥不一样?
  3. 社交网络分析算法应用,社交网络分析算法
  4. python用lda主题_python下进行lda主题挖掘(二)——利用gensim训练LDA模型
  5. nodejs实现单点登录系统
  6. 推荐一个磁盘清理工具
  7. tesorflow2.1.0环境下,tf.keras使用Range优化器(RAdam+Lookahead)
  8. DirectX9 SDK Samples(19) AntiAlias
  9. php唤起微信打开网址,点击链接打开微信再跳转到微信内部浏览器的解决方案
  10. KernelBase.dll中有未经处理的异常,求助大神!!!
  11. Flink 1.12.2 源码浅析 : Transformation 浅析
  12. 最大岛屿 计蒜客--T1405
  13. 激光焊接设备行业领先企业概况与各地发展优劣势分析
  14. 描述流体中声学物理现象的三个基本方程
  15. 画环形或者蚊香线圈的软件介绍以及使用笔记
  16. 高手支招:不用权限快速访问网络资源_jiasuba.com
  17. 打破金属打印性能世界纪录,这家中国公司开发纳米改性超级金属-1
  18. 网络-----各种协议等
  19. 关于pytest的并发多线程一句命令就可以搞定python
  20. 商业模式新生代_一年300+本读书计划之《商业模式新生代》

热门文章

  1. mysql学籍表设计_MySQL基础-学生管理系统数据库设计
  2. Node.js:封装Node通用web容器
  3. EasyUI:Layout 布局
  4. table与tr td样式重叠 table样式边框变细
  5. opencv摄像头拍摄视频并保存方法
  6. Pytorch中view, transpose, permute等方法的区别
  7. Github大盘点!2021年最惊艳的38篇AI论文
  8. Educational Codeforces Round 67 E.Tree Painting (树形dp)
  9. 洛谷 P1725 简单DP单调队列优化
  10. ●POJ 1228 Grandpas Estate