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对比

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 跟踪算法(一)光流法跟踪

    跟踪算法(一)光流法跟踪COPYFROM:http://blog.csdn.net/crzy_sparrow/article/details/7407604BTW:原文作者是我学习的榜样!本文目录:     一.基于特征点的目标跟踪的一般方法     二.光流法     三.opencv中的光流法函数    四.用类封装基于光流法的目标跟踪方法     

    2022年7月23日
    17
  • FTP命令 上传下载文件[通俗易懂]

    FTP命令 上传下载文件[通俗易懂]1.连接ftp服务器格式:ftp[hostname|ip-address]a)在linux命令行下输入:ftp192.168.1.1b)服务器询问你用户名和密码,分别输入用户名和相应密码,待认证通过即可。2.下载文件下载文件通常用get和mget这两条命令。a)get格式:get[remote-file][local-file]将文件从远端主机中传送至…

    2022年9月21日
    5
  • MySQL JDBC StreamResult通信原理浅析

    MySQL JDBC StreamResult通信原理浅析好几年没写技术博客了,今天写一个小的技术点给大家分享,关于MySQLJDBCStreamResult的原理分享,难度不大,就当程序员的闲聊。如果使用MySQLJDBC读取过比较大的数据(例如超过1GB),应该清楚在读取的时候,很可能会Java堆内存溢出,我们的解决方案通常是使用useCursorFetch读取或Stream读取来处理。使用Stream读取的方式通常的操作方式是在执行SQL…

    2022年7月17日
    32
  • Unity安装 ILRuntime插件

    Unity安装 ILRuntime插件unity2019.4.2f1c1在packagemanager里面找不到ILRuntime插件解决办法:编辑项目下Packages的manifest.json文件,添加如下代码贴出来方便大家复制自己需要的部分{“scopedRegistries”:[{“name”:”ILRuntime”,”url”:”https://registry.npmjs.org”,”scopes”:[…

    2022年6月27日
    81
  • CCF201503试题

    CCF201503试题

    2022年2月23日
    58
  • C# CultureInfo.InvariantCulture

    C# CultureInfo.InvariantCulture今天在写代码的过程中发现了一个有意思的问题,我在写了一个日期格式转化的时候发现不同电脑的运行结果不一致。代码如下stringstr=this.tbTime.Text;if(string.IsNullOrEmpty(this.tbTime.Text)){return;…

    2022年6月19日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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