前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入底层,详解retrofit封装okhttp请求

深入底层,详解retrofit封装okhttp请求

作者头像
用户1907613
发布2021-05-11 09:45:47
7340
发布2021-05-11 09:45:47
举报
文章被收录于专栏:Android群英传

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相关的知识点一般都会被问到。

下面是牛客上的部分面经分享

通过上面的面试题分享我们不难发现,大厂面试很多题目都是问的基础,但是还是有很多人回答不上来,每年都有很多朋友挂在上面,归根结底,就是基础知识掌握的不够牢靠。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 群英传 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档