Retrofit 原理浅析 二

news2024/9/21 12:38:53

类型安全的连接

enqueue : 异步 切线程,会在队列中执行

execute :  同步 不切线程

Retrofit:Create

1.验证是否是接口  否则是类或者其他则报错 API Declarations must be interfaces

2.check . add  取出进行处理,然后添加到Colltions 中,如果有父接口则报错,不能是泛型

        添加到队列

进一步验证

每个方法/接口 初次调用时验证结构,创建时create时候就进行验证

判断是否是jdk8的默认方法,或者非静态方法,不进行加载default和static的方法

动态代理:

参数:1 classLoader,临时的classLoader,意义不大 ,2.数组,当前接口API , 3 InvocationHandler ,回调方法 核心invoke

如果是Object的方法 则直接invoke

如果是java8平台特性方法,则过滤

然后 loadServiceMethod

 ServiceMethod = Map 带缓存的加载

核心  invoke 方法:

创建OKHttpCall

创建adapt 

 

1 判断是否是自动生成的方法

2 callAdapter

OkhttpCall: dapte 最终执行OkhttpCall.adapte

 

执行Retrofit的Calladpe

通过工厂方法

在Retrofit初始化

调用者

调用者

调用,Retrofit的Builder

new Default

retrofit.enqueue 则执行的是executorCallbackCall 包着OkHttpCall

delegate = call

Execute 线程管理

切线程 然后执行回调

切线程的callbackExecute

切线程是 往 前台切换

enqueue:

创建一个Okhttp3.call 

然后通过okhttp3的call调用enqueue

通过Fastory 创建call 然后判断方法:

然后判断注解和传入的类型进行判断拼接

parseResopose 解析数据

convert 最终是调用配置的

转为JsonReader

RxJava

callAdapter 判断是否是这几种

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1245357.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【uniapp】部分图标点击事件无反应

比如:点击这个图标在h5都正常,在小程序上无反应 css:也设置z-index,padding 页面上也试过click.native.stop.prevent"changePassword()" 时而可以时而不行, 最后发现是手机里输入键盘的原因,输…

pcie-2-rj45速度优化

背景: 目前用iperf3打流传输速率达不到要求,千兆实际要求跑到800M以上: 优化方案: 1.优化defconfig: 首先编译user版本验证看是否正常 debug版本关闭CONFIG_SLUB_DEBUG_ON宏控。 2.找FAE ,通过更换驱动,或者更新驱动来优化 3.绑定大核: 以8125网卡为例,udp…

【计算机网络笔记】数据链路层概述

系列文章目录 什么是计算机网络? 什么是网络协议? 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能(1)——速率、带宽、延迟 计算机网络性能(2)…

开启数据库审计(db,extended级别或os级别),并将审计文件存放到/home/oracle/audit下

文章目录 开启数据库审计(db,extended级别或os级别),并将审计文件存放到/home/oracle/audit下一. 简介二. 配置2.1. 审计是否安装2.2. 审计表空间迁移2.3. 审计参数2.4. 审计级别2.5. 其他审计选项2.6. 审计相关视图 三. 使用3.1. 开启/关闭审…

【已解决】微信小程序腾讯地图的map清除markers,setData将marker置空后,安卓和ios还会显示上次的内容的问题所在以及解决办法

问题描述 1.我首先点击了这个marker 2.这里可以看到根据id获取到了他的信息 3.当我滑动了地图,这时候重新加载了markers,我再次点击这个marker 4.会发现获取不到数据了 问题原因 个人猜测引起这个问题的原因是id重叠了,导致获取不到数据&am…

【shell】函数和数组的原理及使用注意

目录 一、函数 1.1函数的优点: 1.2如何定义函数(shell) 1.3 演示函数的作用以及增删改查 关于函数的使用 关于declare查询的用法 关于函数的增加与调用 关于函数的返回值return 关于echo作为返回 关于函数的参数传递 关于函数的环…

前端编码技巧须知

前端开发中可能会使用到以下软件,它们各自具有不同的作用: 代码编辑器:例如Sublime Text、Atom、Visual Studio Code等,用于编写和编辑HTML、CSS和JavaScript等前端代码。网页浏览器:例如Chrome、Firefox、Safari等&a…

【C++】C++入门(下)——有C语言基础的C++学习

C入门(下) 一、引用1.引用的概念2.引用的定义3.引用特性4.常引用5.使用场景做参数做返回值 6.引用的作用7.引用与指针的区别 二、内联函数1.概念2.特性 三、auto关键字(C11)1.简介2.auto的使用细则auto与指针和引用结合起来使用在…

python appiumn 自动化测试 入门

资源下载 链接:https://pan.baidu.com/s/1zl1yXYna73RAL-V0PQ9xHA 提取码:syjg 安装JDK 不详细说了 配置Android SDK 新建 ANDROID_HOME配置对应的SDK路径 新增PATH 安装python库 pip install Appium-Python-Client报如图错误的话可以使用 pytho…

搭建FTP

第一步:按【Win R】快捷键打开运行对话框,输入“optionalfeatures”后,按回车键 第二步:从“启用或关闭Windows功能”弹窗中找到Internet Information Services(或者中文版Internet信息服务)并打开,配置IIS并点击确…

单片机语音芯片开发要解决的问题

在单片机语音芯片开发过程中,可能会遇到多种问题,这些问题可能来自于技术层面,也可能来自于芯片本身的设计和应用层面。下面让我们具体从芯片的功耗、语音识别的准度、芯片的尺寸和芯片的可靠性四个方面开展讨论。 1.芯片的功耗问题 首先&a…

motionlayout的简单使用

MotionLayout 什么是motionLayout? MotionLayout 是 Android 中的一个强大工具,用于创建复杂的布局动画和过渡效果。它是 ConstraintLayout 的一个子类,继承了 ConstraintLayout 的布局功能,同时添加了动画和过渡的支持。Motion…

Java字节码指令集概述及分类详解

Java全能学习面试指南:https://javaxiaobear.cn 1、字节码指令集与解析概述 Java字节码对于虚拟机,就好像汇编语言对于计算机,属于基本执行指令。 Java 虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码&a…

Redis并发问题解决方案

目录 前言 1.分布式锁 1.基于单个节点 2.基于多个节点 3.watch(乐观锁) 2.原子操作 1.单命令操作 2.Lua 脚本(多命令操作) 3.事务 1.执行步骤 2.错误处理 3.崩溃处理 总结 前言 在多个客户端并发访问Redis的时候,虽然Redis是单线程执行指令&#xff…

Banana Pi [BPi-R3-Mini] 回顾和主线 ImmortalWrt 固件支持

BananaPi BPi-R3 Mini 采用 MediaTek 830(4 个 A53,最高 2.0 GHz),具有 2 个 2.5 GbE、AX4200 2.4G/5G 无线和 USB 2.0 端口。它还具有两个 M.2 连接器,可用于 NVMe SSD 和 5G 模块(板上包含 Nano SIM 插槽…

绝地求生:PGC 2023 赛事直播期间最高可获:2000万G-Coins,你还不来吗?

今年PGC直播期间将有最高2000万G-Coin掉落,究竟花落谁家咱们拭目以待 公告原文:Watch PGC 2023 Live And Earn G-Coins! 如何赚取高额G-Coin? Throughout the PGC 2023, an astounding 20,000,000 G-Coins will be up for grabs as part of …

常见树种(贵州省):013桉树、米槠、栲类

摘要:本专栏树种介绍图片来源于PPBC中国植物图像库(下附网址),本文整理仅做交流学习使用,同时便于查找,如有侵权请联系删除。 图片网址:PPBC中国植物图像库——最大的植物分类图片库 一、桉树 …

京东数据分析(京东大数据):2023年10月京东手机行业品牌销售排行榜

鲸参谋监测的京东平台10月份手机市场销售数据已出炉! 根据鲸参谋平台的数据显示,今年10月份,京东平台手机行业的销量约340万,环比增长约11%,同比则下滑约2%;销售额为108亿,环比增长约17%&#x…

c#数据库:vs2022 加入mysql数据源

网上有VS2019连接MySQL数据库的,那么VS2022,VS2023如果和连接到mysql数据库呢,这里总结一下我的经历: 1、首先下载ODBC驱动安装包 当前下载地址:https://dev.mysql.com/downloads/connector/odbc/ 2、ODBC安装 下载完…

小程序可拖拽按钮

你有没有遇到过在页面中有一个固定在某个位置的按钮,永远的挡住了你想要看的区域? 在小程序的列表页面中,常常会有一个提报的入口固定在右下角,如果这个按钮不可拖动的话,可能会挡住下面的事件,让用户操作起…