深入底层,详解retrofit封装okhttp请求
共 2064字,需浏览 5分钟
·
2021-05-06 23:06
OkHttp是Square开源的轻量级框架,一款高效、快速的Android版Http client,是当下最常运用的框架之一,也是面试必问的知识方向。
• 无法适配自动进行线程的切换,消息回来需要切到主线程,主线程要自己去写。
• 调用比较复杂,需要自己进行封装。
• 用户网络请求的接口配置繁琐,尤其是需要配置请求body,请求头,参数的时候;
• 数据解析过程需要用户手动拿到responsbody进行解析,不能复用;
• 缓存失效:网络请求时一般都会获取手机的一些硬件或网络信息,比如使用的网络环境。同时为了信息传输的安全性,可能还会对请求进行加密。在这些情况下OkHttp的缓存系统就会失效了,导致用户在无网络情况下不能访问缓存。
而解决这些问题的首选方案就是用 Retrofit ,基于OkHttp的一个高解耦的网络框架。
大家一般都推荐RxJava+Retrofit+OkHttp框架。
Retrofit主要负责应用层面的封装,比如:具体的请求、线程切换、数据转换。主要面向开发者,方便使用,比如请求参数,响应数据的处理,错误处理等;
OkHttp负责请求的过程;
RxJava负责异步,各种线程之间的切换
搭配使用非常便利。
下面让我们来进行一个对比,看一下,Retrofit是如何来封装Okhttp请求的。
大体的流程都是:
创建网络请求实体client->构建真正的网络请求-> 将网络请求方案与真正的网络请求实体结合构成一个请求Call->执行网络请求->处理返回数据->处理Android 平台的线程问题。
通过对比我们可以发现:
1. OkHttp创建的是OkhttpClient,然而retrofit创建的是Retrofit实例
2. 构建蓝色的Requet的方案,retrofit是通过注解来进行的适配
3. 配置Call的过程中,retrofit是利用Adapter适配的Okhttp的Call
4. 相对okhttp,retrofit会对responseBody进行自动Gson解析
5. 相对okhttp,retrofit会自动的完成线程的切换。
面试的时候,以上Retrofit和Okhttp相关的知识点一般都会被问到。
通过上面的面试题分享我们不难发现,大厂面试很多题目都是问的基础,但是还是有很多人回答不上来,每年都有很多朋友挂在上面,归根结底,就是基础知识掌握的不够牢靠。
本次特邀前爱奇艺高级工程师lance老师和前三星/小米高级研发经理Alvin老师给大家带来《OkHttp源码分析与Retrofit中的注解》的精品小课,用两节课的时间带你深度解析OkHttp源码与Retrofit封装,明白Retrofit的原理。
1042页阿里大神的《设计思想与框架学习笔记》
Android面试宝典:《2056页Android面试题大合集(含答案解析)》
适合人群
具备移动开发基础;
具备一定自学能力;
立志成为高级工程师、架构师的安卓开发者;
>>授课讲师
某游戏公司主程,前爱奇艺高级工程师
专精领域:移动平台开发,NDK、架构、性能优化;
前三星高级研发经理,国内首批Android底层技术导航人
专精领域:精通Android FrameWork源码及性能优化;三星手机Rom核心架构设计,专注NDK底层设计与开发。
>>课程排期
5月7日:看架构师解剖retrofit源码内核
retrofit如何将接口转变成网络请求的原理
24种设计模式中的9种是如何构建Retrofit架构体系的
以不变应万变的网络请求架构搭建方案
retrofit架构设计优化方案
retrofit这个SDK的架构设计原理
5月8日:一节课真正读懂OkHttp
使用OkHttp几行代码,内部是怎么完成一次请求的?
学完线程池你会用吗?OkHttp中的线程池
不止是概念,拦截器对责任链设计模式的实战
okhttp为什么会使用okio而不是用普通io
Http怎样才能使用缓存?
怎么复用Socket?连接池实现原理
文中资料免费赠送训练营学员
加助手兰兰微信报名训练营