美文网首页学习Android知识Android开发
拆轮子:OkHttp 的源码解析(一):概述

拆轮子:OkHttp 的源码解析(一):概述

作者: ldlywt | 来源:发表于2017-05-09 23:19 被阅读436次

OkHttp3.7源码分析文章列表如下:
拆轮子:OkHttp 的源码解析(一):概述
拆轮子:OkHttp 的源码解析(二):流程分析
拆轮子:OkHttp 的源码解析(三):任务分发器(Dispatcher)
拆轮子:OkHttp 的源码解析(四):拦截器(Interceptor)

1、前言

我看了很多解析 OkHttp 源码的博客,大牛写的都很棒,但是大部分都写的很深奥,直接从内部开始分析,看着看着越来越蒙了,然后就没有然后了,o(╯□╰)o。

我觉得读源码最好的方式是先写出基本使用代码,例如:在 Activity 中写出 OkHttp 的异步请求代码,然后跟着执行流程一步一步点击进去查看源码,顺着执行流程走,读起来会容易很多。

这几天辞职有时间,看了好几天的 OkHttp,顺便整理记录下。

Android以前有很多流行的网络框架,但是 现在主流只剩下 OkHttp(Retrofit 内部也是使用 OkHttp)。

Android网络框架.png

谷歌把自己的亲儿子 Volley 都放弃,推举我们使用 OkHttp。OkHttp 这么流行和备受推举,我们在看代码之前先看下它的优点。

2、OkHttp 的版本

compile 'com.squareup.okhttp3:okhttp:3.7.0'

3、OkHttp 的优点

  • 支持 SPDY、Http2.0、Https。
  • 如果 SPDY 不可用,会使用连接池减少请求延迟。
  • 允许连接同一主机的所有请求分享一个 socket。
  • 使用 GZIP 压缩下载内容,且压缩操作对用户是透明的。
  • 利用响应缓存来避免重复的网络请求。
  • 当网络出现问题的时候,OKHttp 会依然有效,它将从常见的连接问题当中恢复。
  • 如果你的服务端有多个I P地址,当第一个地址连接失败时,OKHttp 会尝试连接其他的地址。

4、OkHttp 的机制

  • 多路复用机制

    • OkHttp 请求之前会先从 ConnectionPool 中获取 Connection 对象,如果能获取到,则不会新建;如果获取失败,就调用 createNextConnection( ) 方法创建对象。
  • 重连机制

    • Call 发送请求时,判断是否能 getRespose,如果不能,执行 recover,死循环获取直到重连。

5、OkHttp 主要设计模式

  • 单例模式
    • 内部维护了一个单例线程池。
  • Builder 模式
    • 生成 OkHttpClient 和 Request 对象都使用 Builder 模式。
  • Interceptor 责任链模式
    • 拦截器(Interceptor)内部使用。

6、OkHttp 的核心类

OkHttp 的核心类.png

7、阅读流程

OkHttp阅读流程.png

传送门
拆轮子:OkHttp 的源码解析(二):流程分析

8、更多阅读&鸣谢

OKHttp源码解析
拆轮子系列:拆 OkHttp
OkHttp3源码分析[综述]
android面试题-okhttp内核剖析
OkHttp 3.7源码分析(一)——整体架构

相关文章

网友评论

    本文标题:拆轮子:OkHttp 的源码解析(一):概述

    本文链接:https://www.haomeiwen.com/subject/lvvitxtx.html