okHttp源码总结

作者: LiChengZe_Blog | 来源:发表于2019-05-06 11:58 被阅读0次

1.创建OkHttp的时候 构造就会给我们new Builder()方法

这个方法中我们创建了一个Dispatcher分发器

这个Dispatcher分发器会自动创建runningAsyncCalls异步等待对列

和runningSyncCalls同步等待对列

2. 创建请求对象

3.通过okhttp对象.newCall(请求对象) 获取call对象

通过call对象调用 同步或者异步 发起网络请求

Call 的实现类 RealCall

因为 Call 是接口,内部定义了同步与异步的请求,

以及取消请求等操作,这些操作是由 RealCall 真正去实现的。

同步:call对象.execute()

源码详解:

通过OkHttpClient对象调用分发器方法调用executed()方法

把所有的RealCall对象(RealCall继承与Call)添加到同步等待对列

然后依次执行

同时调用了getResponseWithInterceptorChain()拦截器方法()

依次执行7个拦截器  再循环 返回Response对象 如果一个拦截器出错误

那么就没有数据

拦截器方法:

获取数据:通过同步对象.body().string();

.body()从Response.body()中取值

当调用数据以后再次调用会报错 因为我们调用一次后

okhttp关闭读取流 所有就无法重复调用

异步: 

源码详解:

通过OkHttpClient对象调用分发器方法调用enqueue(new AsyncCall(接口回调))方法

RealCal内部有executeOn(线程池)方法 execute()处理数据  给responseCallback赋值

当我们调用AsyncCall这个接口 会自动调用executeOn方法 同时接口回调赋值给我们

client对象responseCallback 返回给两个方法数据

当调用数据以后再次调用会报错 因为我们调用一次后

okhttp关闭读取流 所有就无法重复调用

更多可参考:OKHTTP异步和同步请求简单分析

相关文章

网友评论

    本文标题:okHttp源码总结

    本文链接:https://www.haomeiwen.com/subject/yolroqtx.html