我知道 mWaitingRequest 会保留具有相同 cacheKey 的请求,当请求完成时,具有相同 cacheKey 的请求将会添加到 mCacheQueue 。
但我认为这不是必需的,为什么不直接将具有相同cacheKey的请求添加到mCacheQueue?
我只是搜索谷歌,但没有得到答案。
答案 0 :(得分:1)
因为那时他们没有缓存,所有人都会去网络队,你不想要那个
答案 1 :(得分:0)
具有相同cacheKey的请求将添加到mCacheQueue
仅在必须缓存请求时才添加请求,请再次查看source code:
<T> void finish(Request<T> request) {
...
if (request.shouldCache()) {
synchronized (mWaitingRequests) {
String cacheKey = request.getCacheKey();
Queue<Request<?>> waitingRequests = mWaitingRequests.remove(cacheKey);
if (waitingRequests != null) {
if (VolleyLog.DEBUG) {
VolleyLog.v("Releasing %d waiting requests for cacheKey=%s.",
waitingRequests.size(), cacheKey);
}
// Process all queued up requests. They won't be considered as in flight, but
// that's not a problem as the cache has been primed by 'request'.
mCacheQueue.addAll(waitingRequests);
}
}
}
}
为什么不将具有相同cacheKey的请求添加到mCacheQueue 直接?
首先,您应该注意服务器确定缓存策略,例如,服务器可能不允许您缓存数据并将http header
的缓存字段设置为:
cache-control: private, max-age=0, no-cache
这意味着对同一URL
的每个新请求都可以有不同的响应,可以有新的响应,这意味着服务器响应可以随时更改,不得缓存。现在,如果用户想要缓存响应并且已经发出多个请求,则每个请求都可能有新的响应,因此为了简单起见,如果用户想要缓存数据,则每个请求都必须发送到NetworkDispatcher
。