OKHttp阅读一

1.首先通过Build模式创建了 OKhttpclient 和Request

2.然后通过client.newCall(res)创建了 call对象RealCall

3.Realall可以通过execute 和 enqueue 执行同步方法

同步execute

1.会先判断这个链接是否是第一次 不是抛出异常

2.会调用dispat.excute 分发 将这次请求加入同步队列中

3.执行拦截链

4返回response

5.调用dispather.finished j将这次请求移除 runningSysCalls队列

6.重新计算 正在运行的请求数(runningSysCalls.size+RunningAsyncCalls.size)

7.调用 idlecall.run关闭

异步enqueue

1.会先判断这个链接是否是第一次 不是抛出异常

2.调用dispatcher().enqueue()

2.1会先判断 当前运行 的 异步队列数 是否小于64  再判断当前运行主机数是否《5

满足 加入 runningAsyncCall  并开始线程池executorService执行 

不满足  加入readAsyncCall 队列

2.2 

3因为AsyncCall 是一个runanble 最终调用了realCall的execute

1.会先调用 getResponseWithInterceptorChain 获取responese

2.如果判断是否取消 是否失败 是否异常 来走 onFailure

还是走OnResponse

4.调用 dispather.finsh 关闭

4.1 会先把当前请求移除 异步运行队列

4.2调用promote 来重新调整异步队列

4.21 会先判断当前主机运行数量是否<5

然后判断readAsyncCalls队列中是否还有待执行请求

如果有 就加入 RunningAsyncCalls队列

当RunningAsyncCalls.size数量 》64就停止加入

4.3 然后重新计算运行请求数量

4.3当运行数量为0 释放资源

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容