OkHttp介绍

OkHttp是目前Android使用最频繁的网络请求框架(目前的Volley, Retrofit底层都是使用的OkHttp), 框架由Square公司开源, 在Android4.4之后HttpUrlConnection也默认使用OkHttp的实现
在OkHttp4之后改为kotlin实现

  • 优势所在
    1. 支持Socket连接池复用TCP连接
    2. 支持Http2.0协议
    3. 支持Gzip压缩格式
    4. 支持缓存控制
    5. 请求失败时的自动重试和重定向机制

      OkHttp的分发器

      对于同步请求, 直接加入runningAsyncCalls队列当中

而同步请求对于请求次数不超过64次, 同主机不超过的5次的请求直接加入到runningAsyncCalls队列当中, 如果不符合条件则加入到readAsyncCalls中

默认的五个拦截器的职责

重试与重定向拦截器

在发生一次请求超时的情况下, 去寻找可用的ip重新请求服务器.
某次请求返回了30x时, 并且在响应报文头的Location字段中有重定向的url, 则根据这个url重新构建一个Request

  • 重试
  • 重定向

桥接拦截器

为request补充请求头等信息
提供cookie, 如果用户需要cookie会在这里进行处理

缓存拦截器

请求前查询是否有可用缓存, 如果缓存有效, 则直接返回缓存

连接拦截器

与服务器完成TCP连接

请求服务拦截器

与服务器通信;封装请求数据与解析响应
对于已经取消的请求结果不再返回客户端

如果在通过重试与重定向拦截器之后取消了任务, 取消是否无效

仍然会去请求, 但是用户不会接收到响应