【Android开源框架面试题】Android如何发起网络请求,你有用过相关框架码?OkHttp框架解决了你什么问题?

本文介绍了如何在Android中使用OkHttp发起网络请求,包括其连接池机制、Gzip压缩和响应缓存功能。同时讨论了OkHttp的优点和其作为基础网络库的角色,以及面试中可能遇到的问题和误解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android如何发起网络请求,你有用过相关框架码?OkHttp框架解决了你什么问题?(美团)

这道题想考察什么?

对网络体系的整体了解情况。问题中有提到OkHttp,第一是掌握面试者对OkHttp原理的了解,第二也是了解面试者是否有自己的思想,而不是人云亦云都在用OkHttp,所以我也用。

考察的知识点

网络编程,OkHttp原理

考生如何回答
如何发起网络请求?

现在绝大多数的网络交互采用的是Http协议,也有同学使用过webSocket、ftp等协议。首先什么是协议,这些协议之间是什么关系,他们和TCP/IP又有什么关系?

在这里插入图片描述

平时我们所说的Http也好还是WebSocket也要,都是属于应用层协议。应用层负责的工作主要就是定义数据格式,制定通信双方采用何种数据格式通信。比如我们平时使用中文交流,就需要按照中文的语法组织语言,否则通信的另一方无法理解。

而应用层需要借助下层,传输层进行数据的传输,传输层需要传输数据同样需要使用下层的网络层完成寻址,确定要把数据传到哪个地址,传给谁。我们平时说的TCP协议就是传输层协议,而IP协议则是网络层协议。

写网络程序就必须用Socket,这是程序员都知道的,实际上socket就是对TCP/IP协议的封装。也就是说Http需要先利用Socket建立TCP/IP连接,然后就可以使用Socket读写数据,这个数据需要按照Http协议的规则、语义去封装与解析,这样就完成了Http的通信。如果按照WebSocket的规则定制数据,就是在完成WebSocket的通信。

OkHttp解决了你什么问题?

一般而言,我们都会借助一些框架来完成这个网络交互,OkHttp就是一个能够帮助我们完成网络通信的框架之一。借助OkHttp能否完成Http1.x、Http2.0以及WebSocket的通信。

连接池

首先OkHttp帮我们封装了Socket,提供更加简单的API让我们完成网络请求,同时OkHttp也根据协议规则,帮我们实现Socket的连接池,减少了请求延迟。

在这里插入图片描述

以Http协议为例,Http协议需要首先建立Socket连接(即TCP/IP连接),同时我们了解到TCP/IP连接需要进行三次握手,断开连接需要完成四次挥手。在完成了对某一域名的Socket连接之后,借助此Socket来进行Http数据的交互。那么第一次交互完成之后,如果需要进行与此域名的第二次交互,就可以利用前一次的Socket连接进行。因此OkHttp维护一个连接对象(Socket对象)复用池,在需要发起网络交互前,先尝试从对象池中查找是否有与本次请求的域名建立好的有效Socket连接,如果有,就不需要再去进行三次握手建立新的Socket连接。

Gzip压缩

第二,在进行数据传输时,我们都能够理解,传输的数据量越小,所需要花费的时间自然越短。因此OkHttp在发起请求时,默认会配置一个Http请求头:Accept-Encoding: gzip,此请求头告知服务器,可以将响应数据使用gzip压缩。

响应缓存

OkHttp也能够为我们自动根据协议规则缓存响应,在发起请求之前,OkHttp也会根据协议规则判断是否允许使用缓存,如果能够使用缓存,则可以不与服务器发起网络交互,直接将以前请求的缓存返回给使用者。但是需要主义的是,OkHttp缓存需要我们主动开启,同时只会对GET请求缓存。

其他

当然OkHttp还帮我们完成了以简单的配置完成对协议的处理,比如Cookie,DNS服务器,代理等等都只需要一个API就能完成对这些内容的配置与使用。

以上说明的都是OkHttp通用的介绍,其实我们为什么要用OkHttp?或者OkHttp帮我们解决了什么问题?没有太多的原因,就是单纯的okhttp提供的接口更友好,功能也齐全。另外多人开发一个项目的时候,因为每个人有自己的编码风格,单单一个网络访问,每个人都有不同的写法和封装。在一个项目中,这种代码必然是冗余的。而使用公开的框架,能够把大家的能力尽可能拉平到一条线上,避免一些基础错误。

同时还有些面试官可能会问:你觉得OkHttp有什么缺点?

这个问题有些同学会回答:OkHttp不能把响应切回主线程;OkHttp的调用还是比较麻烦;嵌套请求不方便。其实在我看来,这些不应该说是OkHttp的缺点。

OkHttp是一个Java框架,并不是专用于Android。而且OkHttp的定位应该是一个网络基础功能库,它不需要考虑我们的业务场景是否需要嵌套调用,是否需要切换线程。如果考虑到业务我们应该在功能库的基础上自行完成封装,比如Retrofit就完成了对OkHttp的封装。

最后

我整理了一套Android面试题合集,除了以上面试题,还包含【Java 基础、集合、多线程、虚拟机、反射、泛型、并发编程、Android四大组件、异步任务和消息机制、UI绘制、性能调优、SDN、第三方框架、设计模式、Kotlin、计算机网络、系统启动流程、Dart、Flutter、算法和数据结构、NDK、H.264、H.265.音频编解码、FFmpeg、OpenMax、OpenCV、OpenGL ES
在这里插入图片描述

有需要的朋友可以扫描下方二维码,免费领取全部面试题+答案解析!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值