Android面试题:okhttp

相关视频:

okhttp框架解析与应用

相关文章:

OKHttp源码解析(一)--初阶

okhttp源码解析

Android面试题-OkHttp3源码分析

OkHttp源码解析

Okhttp与其他网络框架的对比:

Android 网络(三)

常见问题一:简述一下OkHttp

OkHttp是一个非常优秀的网络请求框架,已被谷歌加入到Android的源码中。目前比较流行的Retrofit也是默认使用OkHttp的。

  • 支持HTTP1.0、HTTP1.1、HTTP2.0、SPDY
  • 支持同步异步
  • 可以缓存响应数据,来减少重复的网络请求
  • 可以从很多常用的连接问题中自动恢复
  • 使用简单(api多,可扩展性好)

常见问题二:看过OkHttp的源码吗,简单说一下

上面是OKHttp总体设计图,主要是通过Diapatcher不断从RequestQueue中取出请求(Call),根据是否已缓存调用Cache或Network这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据。该引擎有同步和异步请求,同步请求通过Call.execute()直接返回当前的Response,而异步请求会把当前的请求Call.enqueue添加(AsyncCall)到请求队列中,并通过回调(Callback)的方式来获取最后结果。

一、基本知识:

(一)、HTTP协议结构:

请求头

  •     表明本次请求的客户端
  •     本次请求所使用的cookie
  •     本次请求希望返回的数据类型
  •     本次请求是否采用数据压缩等等一系列设置

请求体

  •     指定本次请求所使用的方法
  •     主要用来携带本次请求的参数    

响应头

  •     服务器标识
  •     状态码
  •     内容编码
  •     返回给客户端的cookie等

响应体

  •     本次请求所返回的数据

(二)、HTTP工作流程

    首先客户机与服务器需要建立连接(通过socket)
    建立连接后,客户机发送一个请求给服务器
    服务器接到请求后,给予相应的响应信息
    客户端接受服务器所返回的信息,连接断开

(三)、HTTP优势:

  •     简单快速
  •     灵活
  •     无连接
  •     无状态

解释:其中最重要的事无连接和无状态,在早期的互联网中,由于协议都是一些比较简单的协议,内容基本上都是一些静态的页面、图片等,所以无连接、无状态的HTTP可以发挥自己简单快速、灵活的优势。 但随着业务逻辑越来越复杂以及我们对安全性的重视,无连接、无状态反而成为了HTTP的劣势,所以也就又来后来更加高级的互联网协议的诞生。

(四)、SPDY(发音spidi)

  •     SPDY是一种HTTP的兼容协议
  •     支持多路复用请求
  •     对请求划分优先级(优先返回文字,图片音频等随后返回)
  •     压缩HTTP头,以减少请求数据量

(五)、HTTP2.0介绍

  •     基于SPDY,IETF定制的新一代HTTP
  •     拥有更安全的SSL协议
     

(六)、okhttp

  •     为我们android客户端支持HTTP2.0提供了途径
  •     由著名的square团队开发,开源
     

(七)、okhttp优势:

  •     支持SPDY、HTTP2.0,共享同一个socket来处理同一个服务器的所有请求
  •     如果SPDY不可用,则通过连接池来减少请求延时
  •     无缝支持GZIP来减少数据流量
  •     支持同步、异步(异步使用较多)
  •     缓存响应数据来减少重复的网络请求
  •     可以从很多常用的连接问题中自动恢复
  •     使用简单(api多,可扩展性好)

二、OkHttp

OKHttp源码解析

(一)、总体设计

上面是OKHttp总体设计图,主要是通过Diapatcher不断从RequestQueue中取出请求(Call),根据是否已缓存调用Cache或Network这两类数据获取接口之一,从内存缓存或是服务器取得请求的数据。该引擎有同步和异步请求,同步请求通过Call.execute()直接返回当前的Response,而异步请求会把当前的请求Call.enqueue添加(AsyncCall)到请求队列中,并通过回调(Callback)的方式来获取最后结果。

(二)、流程图

(三)、详细类关系图

由于整个设计类图比较大,所以本人将从核心入口client、cache、interceptor、网络配置、连接池、平台适配性…这些方面来逐一进行分析源代码的设计。下面是核心入口OkHttpClient的类设计图

三、封装

网络模块封装好处;
    强大的可复用性;
    与业务逻辑完全隔离;
    强大的可扩展性;

封装思路讲解:
    封装一个公共的OkHttpClient(超时时间等基本设置,get,post等请求方法);
    封装一个通用的请求创建类CommonRequest;
    封装一个通用的响应解析类JsonCommonRequest;


    

猜你喜欢

转载自blog.csdn.net/songzi1228/article/details/84284397