Retrofit+RxJava原理浅析

Retrofit+RxJava原理浅析Retrofit:核心:返回一个对象newISharedListService()动态代理:代理所有的。动态生成一个类:一个你对应的.class文件的对象–>反射代理的是一个object。看不见的类:代理类拓展类的行为和静态的是一样的主要方法:invoke。所有对接口类型的方法的调用都会执行到invoke方法里面代理对象在内存中,而不在外存中。看不见的。所有对接口的调用都会去执行到代理类的invoke函数中。一旦访问到了invoke,就形成了一个功能的拦截获取到你所有.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Retrofit: 核心:返回一个对象 new ISharedListService()
动态代理:代理所有的
动态生成一个类:一个你对应的.class文件的对象–>反射
代理的是一个object。
看不见的类:代理类
拓展类的行为和静态的是一样的
主要方法: invoke
所有对接口类型的方法的调用都会执行到invoke方法里面
代理对象在内存中,而不在外存中。看不见的。
所有对接口的调用都会去执行到代理类的invoke函数中。
一旦访问到了invoke,就形成了一个功能的拦截


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

获取到你所有的注解信息:request动态变化的内容–》动态建立url–》具体请求的request–》解决okhttp中的配置繁琐的问题

在这里插入图片描述

静态代理:代理的思想:间接

method就是retrofit使用时接口的所有信息 loadServiceMethod–>反射、解析 耗性能?缓存 如果method
已经保存到LinkedHashMap中,先从map里取,如果有就直接拿,没有在创建

返回值和网络请求返回的javaBean已经确定,把具体的网络工厂找出来

在这里插入图片描述

ServiceMethod.build来构建了一个具体的网络请求

对应着okhttp使用时的request

在这里插入图片描述

结合RxJava 的Observer,如果不用Rxjava那就返回的就是一个call对象

adapter

根据 returnType来找合适的adapter
returnType来自反射:

在这里插入图片描述

sharedListCall.enqueue–》onResponse、onFailure
返回的Response怎么解析
RxJava:嵌套,解决嵌套网络访问–》链式调度
Call slb = sharedListService.getSharedList(2,1);–>原生
RxJava:Observable coinRankList =iCoinRankService.getCoinRankList(1);
CallAdapter作用:Call—>java对象(上面两个)
适配 handler.post完成线程切换
Response在主线程执行
RxJavaCallAdapterFactory
两个设计模式:工厂设计模式 :抽象工场 适配器模式
先找工场,再找工场对应的适配器
CallAdapter—>nextCallAdapter:
adapterFactories.get(i).get(returnType,annotations,this)

三种不同适配类型,三种抽象工场

Retrofit和Okhttp对比

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/234913.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Java 12 / JDK 12 正式发布

    Java 12 / JDK 12 正式发布Java 12 / JDK 12 正式发布

  • QTreeView中finditems查找子项

    QTreeView中finditems查找子项1、QListQStandardItemModel::findItems(constQString&text,Qt::MatchFlagsflags=Qt::MatchExactly,intcolumn=0)const不特殊指定第二个参数的情况下,此函数只会搜索TreeView的顶层元素,不会匹配子元素。第二个参数中加入“Qt::MatchContains|Q

  • 智能优化算法:海鸥优化算法-附代码

    智能优化算法:海鸥优化算法-附代码2019智能算法:海鸥优化算法-附代码摘要:本文简单介绍智能优化算法-海鸥优化算法1.原理海鸥是遍布全球的海鸟,海鸥种类繁多且大小和身长各不相同。海鸥是杂食动物,吃昆虫、鱼、爬行动物、两栖动物和蚯蚓等。大多数海鸥的身体覆盖着白色的羽毛,经常用面包屑来吸引鱼群,用脚发出雨水落下的声音来吸引藏在地下的蚯蚓。海鸥可以喝淡水和盐水,通过眼睛上方的一对特殊腺体,将盐从它们的体内排出。海鸥以群居式生活,利用智慧来寻找和攻击猎物。海鸥最重要特征是迁徙和攻击行为,迁徙是动物从一个地方到另一个地方根据季节更替

  • MySQL和SQLyog安装配置教程

    MySQL和SQLyog安装配置教程文章目录1.MySQL和配套SQLyog压缩包2.MySQL的安装配置3.SQLyog(小海豚)安装4.最后成功样子5.前期练习可能会需要的脚本需要的可以下载:1.MySQL和配套SQLyog压缩包 百度网盘资源链接:链接:https://pan.baidu.com/s/15r2rmmfzFV8oB5DgdbgwiQ 提取码:3s5u2.MySQL的安装配置可参考文章1.解压压缩包后:复制bin文件的路径2.以管理员身份打开命令提示符进入刚复制的bin文件目录然后按步骤安装MyS

  • StoredProcedure「建议收藏」

    StoredProcedure「建议收藏」 这个玩意称为存储过程,类似于其他编程语言中的函数,它含有可与IF,WHILE等这样的编程构造所结合的SQL语句,以编译的形式保存在数据库中。存储过程可用来编写数据库中处理事务的代码。它可以做SQL所可以做的所有事情!!!它的特点是:1,可以接受输入参数,以输出参数的形式给调用过程返回多个值。2,可以给调用过程或批处理返回状态值,表示成功或失败。3,可以调用其它存储过程并执

  • 寄存器,移位寄存器的电路原理以及verilog代码实现「建议收藏」

    寄存器,移位寄存器的电路原理以及verilog代码实现「建议收藏」寄存器:用以存放二进制代码的电路,下图为由维特阻塞D触发器组成的4位数码寄存器:逻辑功能分析:1.异步端CR置0时,输出置0;2.同步并行置数:D0~D3为4个输入代码,当CP上升沿到达时,D0

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号