开源框架相关面试问题-retrofit网络框架面试问题讲解
retrofit使用简介:
- 在retrofit中通过一个接口作为Http请求的api接口。

注意:@GET("url")中的url只是一个路径,不包含主机号的。 - 创建一个retrofit实例。
- 调用api接口。

retrofit源码剖析:
首先通过Builder模式来创建Retrofit对象,如下:






接着就是将咱们定义的接口转换成实例进行请求,究境它是怎么转换的呢,点击进去查看一下create()方法:

其中会回调invoke()方法,接着最核心的三行代码就出现了:


查看一下loadServiceMethod的具体实现:








再回到主流程来:

这个分析流程跟createCallAdapter()方法类似,就不分析了,回到解析我们api的方法上来:


而看一下adapt()的具体实现:

呃,空的,那肯定在它的子类,其实是在ExecutorCallAdapterFactory类中,然后它里面有个同步也有个异步请求,咱们看下异步请求的细节:


所以最终还是会调用到OkhttpCall的enqueue()方法:

所以~~其实都可以看到retrofit底层实现就是靠okhttp来实现的。
最后对动态代理这块进行总结一下:
- 首先,通过Method把它转换成ServiceMethod;
- 然后,通过serviceMethod,args获取到okHttpCall对象;
- 最后,再把okHttpCall进一步封装并返回Call对象;
开源框架相关面试问题-retrofit网络框架面试问题讲解的更多相关文章
- 开源框架相关面试问题-okhttp网络框架面试问题详解
OkHttp使用简介: ①.准备OkHttpClient对象: 一般app中使用网络可以全部用它,可以将它弄为全局变量,这样就可以共用它的缓存和线程池了. ②.准备Request对象: 很显然它是采用 ...
- Retrofit网络框架入门使用
1.简单介绍 retrofit事实上就是对okhttp做了进一步一层封装优化. 我们仅仅须要通过简单的配置就能使用retrofit来进行网络请求了. Retrofit能够直接返回Bean对象,比如假设 ...
- Mikit前端框架,轻量级CSS&JS前端框架
Mikit CSS Framework Mikit介绍 Mikit是前端开发人员和前端设计师所喜爱的Web框架.Mikit的创建和设计旨在为前端社区提供最灵活而强大的CSS框架. 与许多其他网络框架不 ...
- android快捷开发之Retrofit网络加载框架的简单使用
大家都知道,安卓最大的特点就是开源化,这自然会产生很多十分好用的第三方API,而基本每一个APP都会与网络操作和缓存处理机制打交道,当然,你可以自己通过HttpUrlConnection再通过返回数据 ...
- Android中android-async-http开源网络框架的简单使用
android-async-http开源网络框架是专门针对Android在Apache的基础上构建的异步且基于回调的http client.所有的请求全在UI线程之外发生,而callback发生在创建 ...
- Android网络框架之Retrofit + RxJava + OkHttp 变化的时代
1.什么是Retrofit框架? 它是Square公司开发的现在非常流行的网络框架,所以我们在导入它的包的时候都可以看到这个公司的名字,目前的版本是2. 特点: 性能好,处理快,使用简单,Retrof ...
- 结合Retrofit,RxJava,Okhttp,FastJson的网络框架RRO
Retrofit以其灵活的调用形式, 强大的扩展性著称. 随着RxAndroid的推出, Retrofit这样的可插拔式的网络框架因其可以灵活兼容各种数据解析器, 回调形式(主要还是RxJava啦)而 ...
- plain framework 1(简约框架)一款主要用于网络(游戏)开发的C/C++框架 即将开源发布
在我们的日常开发中,我们往往会遇到这种情况,当我们换了一个开发环境时很可能会重新利用一套新的框架进行开发.由于不同框架有着不同的接口,所以我们不得不花时间再次熟悉这些接口,这将造成开发时间上的重复,而 ...
- RxJava+Retrofit+OkHttp,一步一步封装网络框架;
使用RxJava+Retrofit+OkHttp,首先在build.gradle添加: compile 'com.squareup.okhttp3:okhttp:3.8.1' compile 'com ...
随机推荐
- 安装glance
在控制节点上执行 controllerHost='controller' MYSQL_PASSWD='m4r!adbOP' GLANCE_PASSWD='glance1234!' 1.创建数据库 my ...
- SpringBoot多profile文件配置
1.多Profile文件 我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml默认使用application.properties的配置: ...
- XSS练习平台-XSS Challenges
XSS Challenges http://xss-quiz.int21h.jp/ XSS基础不好的建议优先查看 关于XSS中使用到的html编码 js编码各种场景用法 http://su.xmd ...
- [转帖]VIM常用快捷键
VIM常用快捷键 https://www.cnblogs.com/markleaf/p/7808817.html 快捷键能够显著的提高工作效率 一.移动光标 h,j,k,l 上,下,左,右ctrl-e ...
- 什么是分析型数据库PostgreSQL版
分析型数据库PostgreSQL版(原HybridDB for PostgreSQL)为您提供简单.快速.经济高效的 PB 级云端数据仓库解决方案.分析型数据库PostgreSQL版 兼容 Green ...
- Oracle解决空表不导出
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows ...
- 写着玩的bash脚本
#!/bin/bash function strealingManu { pwdfolder=`pwd` for var in "$@" do man 1 $var > $p ...
- Linux就该这么学——初识重定向
重定向的本质(个人理解) 若是输出重定向,则将命令信息写入到指定文件中; 若是输入重定向,表示将对文件执行一些命令,并将命令结果输出到屏幕. 重定向的5种模式 标准覆盖输入重定向/标准追加输入重定向/ ...
- python商城项目总结
项目概括 本项目用于针对Django框架的练习,主要分为前端和后端两部分.前端负责用户注册.登录.商品展示以及添加购物车和显示订单列表的功能:后端负责会员信息.商品类别.商品信息的增删改查以及订单状态 ...
- Ansible-批量导入key(入门)
系统是centos7.5 python2.75 yum install -y ansible ssh-keygen -t rsa vim /etc/ansible/hosts 定义的一个hello组: ...