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 构造器源码分析 )相关推荐

  1. 彻底理解OkHttp - OkHttp 源码解析及OkHttp的设计思想

    OkHttp 现在统治了Android的网络请求领域,最常用的框架是:Retrofit+okhttp.OkHttp的实现原理和设计思想是必须要了解的,读懂和理解流行的框架也是程序员进阶的必经之路,代码 ...

  2. 修改拦截器里的请求头_OkHttp4 源码分析(1) 请求流程分析

    square/okhttp​github.com 本文基于OkHttp4.7.1分析 同步请求示例代码 OkHttpClient client = new OkHttpClient.Builder() ...

  3. 【Android 10 源码】healthd 模块 HAL 2.0 分析

    Android 9 引入了从 health@1.0 HAL 升级的主要版本 android.hardware.health HAL 2.0.这一新 HAL 具有以下优势: 框架代码和供应商代码之间的区 ...

  4. 4、Eureka 源码解析 之 Eureka Client 启动原理分析

    在前面的一篇文章 3.Eureka 源码解析 之 Eureka Server 启动原理分析当中我们分析了一下 Eureka Server 的启动.在集群环境下 Eureka Server 相互之前需要 ...

  5. 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 二 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

  6. 【Android 事件分发】ItemTouchHelper 源码分析 ( OnItemTouchListener 事件监听器源码分析 )

    Android 事件分发 系列文章目录 [Android 事件分发]事件分发源码分析 ( 驱动层通过中断传递事件 | WindowManagerService 向 View 层传递事件 ) [Andr ...

  7. HBase源码分析之HRegion上compact流程分析(三)

    在<HBase源码分析之HRegion上compact流程分析(二)>一文中,我们没有讲解真正执行合并的CompactionContext的compact()方法.现在我们来分析下它的具体 ...

  8. Flume 1.7 源码分析(一)源码编译

    Flume 1.7 源码分析(一)源码编译 Flume 1.7 源码分析(二)整体架构 Flume 1.7 源码分析(三)程序入口 1 说明 Flume是Cloudera提供的一个高可用的,高可靠的, ...

  9. Storm源码分析之四: Trident源码分析

    Storm源码分析之四: Trident源码分析 @(STORM)[storm] Storm源码分析之四 Trident源码分析 一概述 0小结 1简介 2关键类 1Spout的创建 2spout的消 ...

最新文章

  1. 智能开发框架 JEECG 作者张代浩专访
  2. 在项目中使用Google Closure Compiler
  3. 参考文献顺序不对_Endnote插入参考文献的保姆级教程
  4. Gartner Magic Quadrant for Enterprise Network Firewall (2018,2017,2016,2015,2014,2013,2011,2010)
  5. 去掉Phoca Download的Powered By
  6. android ProgressBar实现扫描SD卡文件 + SimpleAdapter绑定ListView
  7. 给公司省下了300万美元,只因选对了BI工具
  8. 数据挖掘-分类与预测-神经网络算法
  9. 灭顶之灾之网络电视精灵——S2 2.8
  10. python爬知识星球付费数据_Python 爬取知识星球数据
  11. 菩提心的修法-四无量心的具体修法
  12. Kitti数据集百度网盘链接 00-21全
  13. 2048游戏回顾三:自定义Dialog和ProgressBar
  14. DLL编写中extern “C”和__stdcall的作用
  15. 超越之MongDB系列教程(六) MongDB的查询
  16. Katana 项目入门
  17. linux 上 gcc -m32 编译报错解决方案
  18. 01.奇特的一生——柳比歇夫一生的秘密
  19. vs2017python配置opencv_[opencv +VS2017] opencv、vs2017安装配置,环境搭建
  20. 利用公式计算π=4(1-1/3+1/5-1/7+1/9-...)的近似值,直到括号中最后一项的绝对值小于0.000001为止

热门文章

  1. MNMBottomPullToRefresh
  2. Revit二次开发之“使用ElementTransformUtils.MoveElement()移动元素”
  3. 石川es6课程---8、字符串
  4. Day 31 并发编程
  5. JavaScript 返回多个值
  6. OO第一单元总结博客
  7. MySQL InnoDB引擎锁的总结
  8. 产品经理提升修炼的方法
  9. sqlserver Conversion failed when converting the nvarchar to data type int
  10. pku 1691 Painting A Board DFS 抽象建图 + 拓扑排序