OkHttp是Square开源的轻量级框架,一款高效、快速的Android版Http client,是当下最常运用的框架之一,也是面试必问的知识方向。
但是这个框架也给用户留下了不少的问题:
• 无法适配自动进行线程的切换,消息回来需要切到主线程,主线程要自己去写。
• 调用比较复杂,需要自己进行封装。
• 用户网络请求的接口配置繁琐,尤其是需要配置请求body,请求头,参数的时候;
• 数据解析过程需要用户手动拿到responsbody进行解析,不能复用;
• 缓存失效:网络请求时一般都会获取手机的一些硬件或网络信息,比如使用的网络环境。同时为了信息传输的安全性,可能还会对请求进行加密。在这些情况下OkHttp的缓存系统就会失效了,导致用户在无网络情况下不能访问缓存。
而解决这些问题的首选方案就是用 Retrofit ,基于OkHttp的一个高解耦的网络框架。
一般来说是这样的组合
大家一般都推荐RxJava+Retrofit+OkHttp框架。
搭配使用非常便利。
下面让我们来进行一个对比,看一下,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相关的知识点一般都会被问到。
下面是牛客上的部分面经分享
通过上面的面试题分享我们不难发现,大厂面试很多题目都是问的基础,但是还是有很多人回答不上来,每年都有很多朋友挂在上面,归根结底,就是基础知识掌握的不够牢靠。