OkHttp源码初探
来源:互联网 发布:移民美国 知乎 编辑:程序博客网 时间:2024/06/04 20:31
在之前的文章我中我们介绍了OkHttp的基本使用方法并简单说明了源码下各个module的功能作用,从这篇开始我们将要开始分析okHttp的源码。
首先,我们先来回忆一下OkHttp的使用过程:
1.创建一个OkHttpClient对象
2.创建一个Request对象
3.调用OkHttpClient的newCall方法创建request的Call实例
4.调用Call的execute 或 enqeue方法分别启动同步异步请求获取Response
上述我们涉及到几个概念OkHttpClient, Request, Call, Response 我们将分别来分析一下这些内容。
Request
一个Request是一次请求的抽象,我们先简单看下里面的参数:
final HttpUrl url; final String method; final Headers headers; final @Nullable RequestBody body; final Object tag;
可以看到一个Request 基本包含一个请求的url 请求的方法, Headers 和 请求的body,还有一个tag。
关于Request的具体内容,我们会在后面的系列文章中来进行分析。
OkHttpClient
我们可以看到OkHttpClient基本上是和okHttp打交道的门户,我们先来看一下OkHttpClient的定义:
public class OkHttpClient implements Cloneable, Call.Factory, WebSocket.Factory
可以看到OkHttpClient实现了接口Call.Factory 和 WebSocket,Factory顾名思义,OkHttpClient将负责创建Call 和 WebSocket的实例,在这里我们先对WebSocket不做考虑,我们讲桌布分析Http的请求。
OkHttpClient使用了创建者模式,使用一个Builder对象来控制构建一个OkHttpClient所需的各项配置,我们来看一下Builder中的参数:
final Dispatcher dispatcher; final @Nullable Proxy proxy; final List<Protocol> protocols; final List<ConnectionSpec> connectionSpecs; final List<Interceptor> interceptors; final List<Interceptor> networkInterceptors; final EventListener.Factory eventListenerFactory; final ProxySelector proxySelector; final CookieJar cookieJar; final @Nullable Cache cache; final @Nullable InternalCache internalCache; final SocketFactory socketFactory; final @Nullable SSLSocketFactory sslSocketFactory; final @Nullable CertificateChainCleaner certificateChainCleaner; final HostnameVerifier hostnameVerifier; final CertificatePinner certificatePinner; final Authenticator proxyAuthenticator; final Authenticator authenticator; final ConnectionPool connectionPool; final Dns dns; final boolean followSslRedirects; final boolean followRedirects; final boolean retryOnConnectionFailure; final int connectTimeout; final int readTimeout; final int writeTimeout; final int pingInterval;
除了一些Http的配置外,我们可以看到3个特殊的概念配置,分别是EventListener.Factory Dispatcher 和 Interceptor
我们先来看一下EventListener 至于Dispatcher 和 interceptor我们会在系列文章的后续部分看到详细的分析,其中Dispatcher是来管理分发请求任务的,Interceptor是拦截器。
abstract class EventListener { public static final EventListener NONE = new EventListener() { }; static EventListener.Factory factory(final EventListener listener) { return new EventListener.Factory() { public EventListener create(Call call) { return listener; } }; } public void fetchStart(Call call) { } public void dnsStart(Call call, String domainName) { } public void dnsEnd(Call call, String domainName, List<InetAddress> inetAddressList, Throwable throwable) { } public void connectStart(Call call, InetAddress address, int port) { } public void secureConnectStart(Call call) { } public void secureConnectEnd(Call call, Handshake handshake, Throwable throwable) { } public void connectEnd(Call call, InetAddress address, int port, String protocol, Throwable throwable) { } public void requestHeadersStart(Call call) { } public void requestHeadersEnd(Call call, Throwable throwable) { } ... public interface Factory { EventListener create(Call call);
我们可以看到EventListener是对请求过程中各个步骤的事件监听.
Call
一次具体的请求, OkHttpClient通过newCall创建了call对象,通过call对象的execute 或 enqeue来发起请求
Response
网络返回的结果,我们将在后续文章中进行详细的解析。
现在我们已经了解了在okHttp启动中的几个概念 其中有入口 OkHttpClient, 请求的实例Request 请求的抽象Call 拦截器Interceptor 分发管理Call的Dispatcher http的返回响应 Response, 我们还阅读了OkHttpClient的源码, 在下一篇中我们将要详细分析Call的体系结构。
- OkHttp源码初探
- OKHttp源码解析
- OKHttp源码解析
- OKHttp源码解析
- OkHttp源码分析
- OKHttp源码解析
- OKHttp源码解析
- OKHttp源码解析
- OKHttp源码解析
- OKHttp源码解析
- OKHttp源码解析
- OKHttp源码解析
- OkHttp源码解析
- OKHttp源码解析
- OKHttp源码解析
- OKHttp源码解析
- OkHttp源码分析
- OKHttp源码解析
- 字符串复制函数——strcpy,strncpy和strlcpy
- 手动启动MyBatists
- Node.js操作redis示例及常用命令汇总
- 【unity实用技能】往avatar身边放置一个物体(随机)
- MySQL高级 之 查询日志分析
- OkHttp源码初探
- 初学Redis(2)——用Redis作为Mysql数据库的缓存
- Xcode-苹果开发软件熟练使用之代码块
- Java 反射机制
- 博客搬家了
- HDU
- list.addAll()是浅拷贝,如何实现list的深拷贝
- 兔子对数---斐波那契数列
- Spring Boot 整合 Mybatis 实现 Druid 多数据源详解