OkHttp请求示例
OkHttp的使用步骤: 1.构造个客户端; 2.构造个请求; 3.将请求与客户端建立联系生成Call对象; 4.同步或者异步请求
源码分析
构造个客户端
构造个请求
将请求与客户端建立联系生成Call对象
调用newCall返回Call对象
newCall实际上是调用RealCall返回Call对象
同步请求
最后返回getResponseWithInterceptorChain()
异步请求
同步请求和异步请求的区别:
1.同步请求调用dispatcher.executed,异步请求调用的dispatcher.enqueue
2.同步请求直接return响应结果,异步请求创建了AsyncCall实例后面通过回调来获取返回结果
dispatcher
通过源码看到Dispatcher维护了三个ArrayDeque,一个保存了正在执行的同步任务;一个保存异步正在执行的请求,另一个是异步等待执行的请求,异步右两个ArrayDeque是因为Dispatcher默认支持最大的并发请求是64个,单个Host最多执行5个并发请求,如果超过,则Call会先被放入到readyAsyncCall中,当出现空闲的线程时,再将readyAsyncCall中的线程移入到runningAsynCalls中,执行请求。
AsyncCall
AsyncCall实现了Runnable接口,最终是通过调用的是它的run()方法获取Response
通过线程池来执行
在run方法中回调getResponseWithInterceptorChain()
getResponseWithInterceptorChain()
至此,一次完整的http请求已经讲解完了,不论同步还是异步最后都调用了getResponseWithInterceptorChain()方法,下一篇文章再来讲解juejin.cn/post/700509…