Retrofit工作原理总结
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工作原理总结相关推荐
- 深入理解Kotlin协程suspend工作原理(初学者也能看得懂)
1. 概述 挂起函数是Kotlin协程最重要的一个特性,所有其他概念都建立在它的基础上.所以我们需要深入了解它的工作原理. 挂起协程意味着在中间停止它.这类似于玩游戏,当我们想暂停游戏时,可以先存档, ...
- Retrofit2 工作原理解析(一)
Retrofit2 工作原理解析(一) 概述 Retrofit是square公司开源的一款类型安全的http请求框架,用于Java和Android程序.Retrofit可以说是restful风格的一个 ...
- 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理
全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...
- 深入理解Nginx工作原理
1 反向代理 1.1 概念 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给intern ...
- 高频开关电源原理_程控开关电源的工作原理
本文介绍了开关电源的工作原理以及它的特点. 程控开关电源要要比线性电源复杂得多. 下图是典型的开关电源工作原理图. 首先对 220 V/50Hz 的 AC 输入,通过桥式整流器进行整流 储能电容对整流 ...
- Servlet生命周期与工作原理
Servlet生命周期分为三个阶段: 1,初始化阶段 调用init()方法 2,响应客户请求阶段 调用service()方法 3,终止阶段 调用destroy()方法 Servlet初始化阶段: 在 ...
- java的工作原理你知道吗_每天用Mybatis,但是Mybatis的工作原理你真的知道吗?
近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,于是边参考别人的博客,边看源码就开干了. 核心部件:SqlSession Executor Stat ...
- linux网络管理原理,Linux__网络管理(物理层 数据链路层 网络层工作原理)
千锋云计算逆战班11点后打卡 今天学习后,进行复习下,物理层 数据链路层 网络层 的工作原理 物理层关心的两件事情:1.信号 2.介质 先说信号:信号分为模拟信号和数字信号 模拟信号: 模拟信号,不 ...
- HDD工作原理 导图
以上导图介绍了我们使用的 (HDD)机械硬盘的基本构造以及核心工作原理,对于大家扫盲有所帮助 参考文档: https://blog.csdn.net/yizhaoxin/article/details ...
- 路由和交换机工作原理
路由器与交换机的工作原理 计算机网络往往由许多种不同类型的网络互连连接而成.如果几个计算机网络只是在物理上连接在一起,它们之间并不能进行通信,那么这种"互连"并没有什么实际意义.因 ...
最新文章
- P1977 出租车拼车
- hasp运行不成功_国内首条ZA-PPV电缆成功运行50天 新电缆有啥不一样?
- 社交网络分析算法应用,社交网络分析算法
- python用lda主题_python下进行lda主题挖掘(二)——利用gensim训练LDA模型
- nodejs实现单点登录系统
- 推荐一个磁盘清理工具
- tesorflow2.1.0环境下,tf.keras使用Range优化器(RAdam+Lookahead)
- DirectX9 SDK Samples(19) AntiAlias
- php唤起微信打开网址,点击链接打开微信再跳转到微信内部浏览器的解决方案
- KernelBase.dll中有未经处理的异常,求助大神!!!
- Flink 1.12.2 源码浅析 : Transformation 浅析
- 最大岛屿 计蒜客--T1405
- 激光焊接设备行业领先企业概况与各地发展优劣势分析
- 描述流体中声学物理现象的三个基本方程
- 画环形或者蚊香线圈的软件介绍以及使用笔记
- 高手支招:不用权限快速访问网络资源_jiasuba.com
- 打破金属打印性能世界纪录,这家中国公司开发纳米改性超级金属-1
- 网络-----各种协议等
- 关于pytest的并发多线程一句命令就可以搞定python
- 商业模式新生代_一年300+本读书计划之《商业模式新生代》
热门文章
- mysql学籍表设计_MySQL基础-学生管理系统数据库设计
- Node.js:封装Node通用web容器
- EasyUI:Layout 布局
- table与tr td样式重叠 table样式边框变细
- opencv摄像头拍摄视频并保存方法
- Pytorch中view, transpose, permute等方法的区别
- Github大盘点!2021年最惊艳的38篇AI论文
- Educational Codeforces Round 67 E.Tree Painting (树形dp)
- 洛谷 P1725 简单DP单调队列优化
- ●POJ 1228 Grandpas Estate