拆轮子:OkHttp 的源码解析(一):概述
2017-05-09 本文已影响436人
ldlywt
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 的核心类.png7、阅读流程
OkHttp阅读流程.png8、更多阅读&鸣谢
OKHttp源码解析
拆轮子系列:拆 OkHttp
OkHttp3源码分析[综述]
android面试题-okhttp内核剖析
OkHttp 3.7源码分析(一)——整体架构