OKHttp源码系列
任缥缈
天狼啸月的追逐
展开
-
OkHttp系列十三、OKHttp的Response对象只能使用一次分析
我们在使用OKHttp做网络请求的时候,会发现一个奇怪的现象,那就是Response对象的这个方法:Response response = client.newCall(requestBuilder.build()).execute();String s = response.body().string();只能调用一次,多次调用的时候,会抛出IllegalStateException的异...原创 2019-10-12 22:55:24 · 1230 阅读 · 0 评论 -
OkHttp系列一、使用OkHttp进行网络请求的4个步骤
我们创建OkHttpClient客户端的方式通常有两种:方式一、OkHttpClient client = new OkHttpClient();方式二、OkHttpClient okHttpClient = new OkHttpClient.Builder().build();上面二者等价,都是创建一个OkHttpClient客户端,其实打开new OkHttpClient()源码我们可...原创 2019-11-10 19:34:15 · 1889 阅读 · 0 评论 -
OkHttp系列二、使用OkHttp进行同步/异步网络请求
简要请求的代码如下:Request mRequest = new Request.Builder().url("www.baidu.com").get().build();Call call = client.newCall(mRequest);//同步请求call.execute();同步请求会阻塞线程,直到请求有了结果。Android主线程中不适用该请求方式,子线程中会较少的使用...原创 2019-11-10 19:39:43 · 561 阅读 · 0 评论 -
OkHttp系列三、OkHttp同步请求流程和源码分析
同样的,第一步肯定是创建OkHttpClient客户端:OkHttpClient okHttpClient = new OkHttpClient.Builder().build();我们先看Builder()构造方法:public Builder() { dispatcher = new Dispatcher(); protocols = DEFAULT_PROTOCOLS; con...原创 2019-11-10 19:48:52 · 233 阅读 · 0 评论 -
OkHttp系列四、OkHttp异步请求流程和源码分析
异步请求的前面三部步:创建OKHttp对象,创建Request对象,创建Call对象都是一样的,这里就不再累述。我们直接从call调用enqueue方法开始进行异步请求开始分析,enqueue方法源码如下:public void enqueue(Callback responseCallback) { synchronized (this) { if (executed) throw ne...原创 2019-11-10 19:52:50 · 261 阅读 · 0 评论 -
OkHttp系列五、OKHttp的任务调度器——Dispatcher
Dispatcher的作用:1、分发同步或者异步请求;2、处理并维护同步或者异步请求的状态,并维护线程池,用于执行请求的复用。Dispatcher的操作都是在UI线程里面实现的。关于Dispatcher我们关注的几个变量:private int maxRequests = 64;//OKHttp允许的最大并发请求数量private int maxRequestsPerHost = 5...原创 2019-11-10 19:55:10 · 678 阅读 · 0 评论 -
OKHttp系列六、OKHttp的核心Dispatcher源码与运行逻辑解析
1、同步请求的用法:Request mRequest = new Request.Builder().url("www.baidu.com").get().build(); Call call = client.newCall(mRequest); Response response = call.execute();上面Call是一个接口,execute()是一个抽象的方法,由Rea...原创 2019-12-08 13:15:43 · 188 阅读 · 0 评论 -
OKHttp系列七、OKHttp的拦截器链
1、OKHttp的拦截器有5种:RetryAndFollowUpInterceptor:重试和请求失败后重定向拦截器。主要作用是:初始化拦截器数据的工作,创建StreamAllocation对象。BridgeInterceptor:桥接和适配拦截器;补充用户创建使用过程中缺少的OKHttp请求头。Cache Interceptor:处理缓存的一些功能。ConnectInterceptor:...原创 2019-12-08 21:52:41 · 379 阅读 · 0 评论 -
OKHttp系列八、RetryAndFollowUpInterceptor重定向拦截器
主要作用——在指定的条件下失败后重连。RetryAndFollowUpInterceptor有两个核心的方法,一个是Response intercept(Chain chain),另一个是intercept调用的Request followUpRequest(Response userResponse, Route route)方法,这两个方法我们后面慢慢梳理。Intercept方法很长,源码...原创 2019-12-10 22:55:53 · 573 阅读 · 0 评论 -
OKHttp系列九、BridgeInterceptor桥接和适配拦截器
他的主要作用就是通过header请求头的形式添加需要的参数,负责设置header请求头的内容长度、编码方式、连接保活时间、缓存Cookie、用户信息等。最常见的使用形式就是:Request.Builder requestBuilder = userRequest.newBuilder();requestBuilder.header(key, value);Header请求头常用参数和描述:...原创 2019-12-12 11:42:58 · 161 阅读 · 0 评论 -
OKHttp系列十、CacheInterceptor缓存策略拦截器
1、主要作用:让我们的客户端对同一个请求再次发起请求的时候可用节省时间。我们先看看在使用OK好的时候是如何实现缓存功能的:File cacheDir = new File("HttpResponseCache");Cache cache = new Cache(cacheDir, 24 * 1024 * 1024); //缓存可用大小为24MOkHttpClient client = ne...原创 2019-12-12 16:54:38 · 214 阅读 · 0 评论 -
OKHttp系列十一、ConnectInterceptor连接池拦截器
包含两个方面的内容,一是网络连接角度发挥作用的网络拦截器,二是从连接池的操作角度发挥作用的拦截器。1、网络连接拦截器,ConnectInterceptor.java的代码很少,逻辑比较简单:public final class ConnectInterceptor implements Interceptor { public final OkHttpClient client; publ...原创 2019-12-12 21:24:57 · 240 阅读 · 0 评论 -
OKHttp系列十二、CallServerInterceptor服务请求拦截器
CallServerInterceptor拦截器的代码量也不大,但是他的核心方法Response intercept(Chain chain)就占据了三分之二的量,所有的核心代码都在这个方法里面。他有两个作用,一是向服务器发起真正的网络请求;二是接收服务器返回的响应数据。public Response intercept(Chain chain) throws IOException { R...原创 2019-12-12 22:28:47 · 206 阅读 · 0 评论