Android:OkHttp请求分发器 Dispatcher的理解和使用
Posted JMW1407
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android:OkHttp请求分发器 Dispatcher的理解和使用相关的知识,希望对你有一定的参考价值。
OkHttp请求分发器 Dispatcher的理解和使用
OkHttp 请求分发器 Dispatcher
当我们调用了 RealCall
的 execute()
或 enqueue()
方法后,RealCall
会调用 Dispatcher
对应的 execute() 和 enqueue() 方法
,请求分发器 Dispatcher 的 execute() 方法
只是简单地把同步请求加入同步请求队列,下面我们来看下 Dipsatcher
中比较重要的 enqueue() 方法
的实现。
1、Dispatcher
的 enqueue()
方法首先会把请求加入到待运行请求队列,然后重用 AsyncCall
的 callsPerHost 字段
,callsPerHost
表示当前请求的主机地址的已执行请求数量
。
2、在我们把某个异步请求加入队列时,Dispatcher
会从已运行异步请求队列和待运行异步请求队列中找出与该请求主机地址相同的请求
,找到主机相同的请求的话,就重用
该请求的 callsPerHost 字段
,也就是是每执行一个该主机地址的请求时,这个值就会加 1
。
3、如果我们的应用中经常会发起多个请求,并且请求的主机地址不多时,我们可以修改 Dispatcher
中的 maxRequestsPerHost
的值,比如下面这样。
okHttpClient.dispatcher.maxRequestsPerHost = 10
这个值默认为 5 ,也就是单个主机地址在某一个时刻的并发请求只能是 5 个。
4、做完重用操作后,Dispatcher
就会创建一个可执行异步请求列表 executableCalls
,然后遍历
待运行异步请求队列。
5、在遍历时,Dispatcher
会判断已运行的异步请求数量是否超出了允许的并发请求的最大值 maxRequests
,这个值默认为 64
,也是可以被修改的。
6、当异步请求数量不超过最大值,并且对应主机地址的请求数量不超过最大值时,就会把该异步请求加入到 executableCalls
,然后把 executableCalls
中的请求都提交到线程池中执行。
参考
1、https://www.jianshu.com/p/5a12ae6d741a
以上是关于Android:OkHttp请求分发器 Dispatcher的理解和使用的主要内容,如果未能解决你的问题,请参考以下文章
OkHttp源码中Dispatcher和connectionPool线程池分析
OkHttp源码中Dispatcher和connectionPool线程池分析
OkHttp源码中Dispatcher和connectionPool线程池分析