【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )
OkHttp 系列文章目录
【OkHttp】OkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 )
【OkHttp】Android 项目导入 OkHttp ( 配置依赖 | 配置 networkSecurityConfig | 配置 ViewBinding | 代码示例 )
【OkHttp】OkHttp Get 和 Post 请求 ( 同步 Get 请求 | 异步 Get 请求 | 同步 Post 请求 | 异步 Post 请求 )
【OkHttp】OkHttp 上传图片 ( 获取 SD 卡动态权限 | 跳转到相册界面选择图片 | 使用 OkHttp 上传图片文件 )
【OkHttp】OkHttp 源码分析 ( 网络框架封装 | OkHttp 4 迁移 | OkHttp 建造者模式 )
【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )
文章目录
- OkHttp 系列文章目录
- 一、OkHttpClient.Builder 各个字段作用
- 二、OkHttpClient.Builder 涉及到的相关源码
- 三、博客资源
一、OkHttpClient.Builder 各个字段作用
在使用 OkHttpClient 都要进行初始化 , 初始化代码如下 :
OkHttpClient mOkHttpClient = new OkHttpClient();
初始化方法中, 创建了 OkHttpClient.Builder 对象 , 该类也是使用创建者模式实例化对象 ;
public OkHttpClient() {this(new Builder());}
分析 OkHttpClient.Builder 创建者中可以设置的成员 :
调度器 : 处理 Get / Post 请求线程的调度 ;
Dispatcher dispatcher;
代理 : 3 种代理模式 , ① 直连模式 , ② HTTP 代理 , ③ SOCKS 代理 ;
@Nullable Proxy proxy;
协议集合 : 使用的协议版本 , 如 “http/1.1” , “http/2” , “spdy/3.1” 等 ;
List<Protocol> protocols;
连接池 : 配置 Socket 连接 , HTTPS 中的 TLS ( 配置安全传输层协议 ) 版本 和 密码套件 ;
List<ConnectionSpec> connectionSpecs;
拦截器 : 监听 , 重写 , 重试 请求 ; 通过链式调用 , 执行拦截器相关任务 ;
final List<Interceptor> interceptors = new ArrayList<>();
final List<Interceptor> networkInterceptors = new ArrayList<>();
代理选择器 : 默认不启用代理 , 直连方式 , 可以通过该字段自定义指定代理方式 ;
ProxySelector proxySelector;
Cookie 存储 : 保存 Cookie ;
CookieJar cookieJar;
缓存对象 : 内部使用 DiskLruCache 进行缓存 , 根据 url , 请求方法 , 请求头 , 验证是否使用某个缓存 ; ( 只支持 Get 请求的缓存响应方式 )
@Nullable Cache cache;
内置缓存对象 :
@Nullable InternalCache internalCache;
Socket 工厂 : 用于创建 Socket ;
SocketFactory socketFactory;
安全套接字工厂 : 使用 HTTPS 协议时 , 创建 SSLSocket ; 涉及到 HTTPS 证书信任问题 , 如果证书不收信任 , 会报异常 ;
@Nullable SSLSocketFactory sslSocketFactory;
证书链清洁器 : 使用 HTTPS 协议时 , 使用 Java TSL 相关 API , 获取有效证书 , 清除不相关证书 ;
@Nullable CertificateChainCleaner certificateChainCleaner;
主机名称校验器 : 使用 HTTPS 协议时 , 如果无法识别 URL 中的主机名称 , 就要进行主机验证 ;
HostnameVerifier hostnameVerifier;
证书锁 : 使用 HTTPS 协议时 , 约束可以信任的证书 , 防止不受信任的证书的攻击行为 , 如果没有受信任的证书 , 报异常 ;
CertificatePinner certificatePinner;
身份认证器 : 如果连接提示未授权 , 重新设置请求头响应新的请求 ;
Authenticator proxyAuthenticator;
Authenticator authenticator;
连接池 : 111 个客户端与 111 个服务器之间的连接是 111 个 Connection 连接 ; 这些连接都放在该连接池中 , 统一管理 ; 如果有相同的 HTTP 请求 , 则可以使用连接池中的连接 ;
ConnectionPool connectionPool;
域名 : 用于域名解析 ;
Dns dns;
是否进行 SSL 重定向 :
boolean followSslRedirects;
是否进行普通重定向 :
boolean followRedirects;
失败后是否重连 :
boolean retryOnConnectionFailure;
回调超时时间 :
int callTimeout;
连接超时时间 :
int connectTimeout;
读取超时时间 :
int readTimeout;
写出超时时间 :
int writeTimeout;
Ping 间隔时间 : 保持长链接 , 周期性执行 Ping 命令 , 该值就是周期时间 ;
int pingInterval;
二、OkHttpClient.Builder 涉及到的相关源码
OkHttpClient 相关代码如下 :
public class OkHttpClient implements Cloneable, Call.Factory, WebSocket.Factory {public OkHttpClient() {this(new Builder());}public static final class Builder {Dispatcher dispatcher;@Nullable Proxy proxy;List<Protocol> protocols;List<ConnectionSpec> connectionSpecs;final List<Interceptor> interceptors = new ArrayList<>();final List<Interceptor> networkInterceptors = new ArrayList<>();EventListener.Factory eventListenerFactory;ProxySelector proxySelector;CookieJar cookieJar;@Nullable Cache cache;@Nullable InternalCache internalCache;SocketFactory socketFactory;@Nullable SSLSocketFactory sslSocketFactory;@Nullable CertificateChainCleaner certificateChainCleaner;HostnameVerifier hostnameVerifier;CertificatePinner certificatePinner;Authenticator proxyAuthenticator;Authenticator authenticator;ConnectionPool connectionPool;Dns dns;boolean followSslRedirects;boolean followRedirects;boolean retryOnConnectionFailure;int callTimeout;int connectTimeout;int readTimeout;int writeTimeout;int pingInterval;}
}
三、博客资源
GitHub : https://github.com/han1202012/OkHttp
【OkHttp】OkHttp 源码分析 ( OkHttpClient.Builder 构造器源码分析 )相关推荐
- 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想
OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...
- 修改拦截器里的请求头_OkHttp4 源码分析(1) 请求流程分析
square/okhttpgithub.com 本文基于OkHttp4.7.1分析 同步请求示例代码 OkHttpClient client = new OkHttpClient.Builder() ...
- 【Android 10 源码】healthd 模块 HAL 2.0 分析
Android 9 引入了从 health@1.0 HAL 升级的主要版本 android.hardware.health HAL 2.0.这一新 HAL 具有以下优势: 框架代码和供应商代码之间的区 ...
- 4、Eureka 源码解析 之 Eureka Client 启动原理分析
在前面的一篇文章 3.Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动.在集群环境下 Eureka Server 相互之前需要 ...
- 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )
Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...
- 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 )
Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...
- HBase源码分析之HRegion上compact流程分析(三)
在<HBase源码分析之HRegion上compact流程分析(二)>一文中,我们没有讲解真正执行合并的CompactionContext的compact()方法.现在我们来分析下它的具体 ...
- Flume 1.7 源码分析(一)源码编译
Flume 1.7 源码分析(一)源码编译 Flume 1.7 源码分析(二)整体架构 Flume 1.7 源码分析(三)程序入口 1 说明 Flume是Cloudera提供的一个高可用的,高可靠的, ...
- Storm源码分析之四: Trident源码分析
Storm源码分析之四: Trident源码分析 @(STORM)[storm] Storm源码分析之四 Trident源码分析 一概述 0小结 1简介 2关键类 1Spout的创建 2spout的消 ...
最新文章
- 智能开发框架 JEECG 作者张代浩专访
- 在项目中使用Google Closure Compiler
- 参考文献顺序不对_Endnote插入参考文献的保姆级教程
- Gartner Magic Quadrant for Enterprise Network Firewall (2018,2017,2016,2015,2014,2013,2011,2010)
- 去掉Phoca Download的Powered By
- android ProgressBar实现扫描SD卡文件 + SimpleAdapter绑定ListView
- 给公司省下了300万美元,只因选对了BI工具
- 数据挖掘-分类与预测-神经网络算法
- 灭顶之灾之网络电视精灵——S2 2.8
- python爬知识星球付费数据_Python 爬取知识星球数据
- 菩提心的修法-四无量心的具体修法
- Kitti数据集百度网盘链接 00-21全
- 2048游戏回顾三:自定义Dialog和ProgressBar
- DLL编写中extern “C”和__stdcall的作用
- 超越之MongDB系列教程(六) MongDB的查询
- Katana 项目入门
- linux 上 gcc -m32 编译报错解决方案
- 01.奇特的一生——柳比歇夫一生的秘密
- vs2017python配置opencv_[opencv +VS2017] opencv、vs2017安装配置,环境搭建
- 利用公式计算π=4(1-1/3+1/5-1/7+1/9-...)的近似值,直到括号中最后一项的绝对值小于0.000001为止
热门文章
- MNMBottomPullToRefresh
- Revit二次开发之“使用ElementTransformUtils.MoveElement()移动元素”
- 石川es6课程---8、字符串
- Day 31 并发编程
- JavaScript 返回多个值
- OO第一单元总结博客
- MySQL InnoDB引擎锁的总结
- 产品经理提升修炼的方法
- sqlserver Conversion failed when converting the nvarchar to data type int
- pku 1691 Painting A Board DFS 抽象建图 + 拓扑排序