die Anfragen mit der gleichen CacheKey werden
Nein zur mCacheQueue hinzugefügt werden, wird die Anforderung nur dann, wenn es hinzugefügt zwischengespeichert werden muss, an den source code wieder einen Blick:
<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);
}
}
}
}
Warum nicht einfach die Anfrage mit dem gleichen cacheKey direkt an die mCacheQueue anhängen?
Zuerst sollten Sie beachten, dass der Server die Caching-Richtlinie bestimmt, zum Beispiel der Server nicht zulassen, können Sie die Daten und stellen Sie Cache-Bereich http header
um so etwas wie Cache:
cache-control: private, max-age=0, no-cache
, dass jedes neue Mittel Anfrage an die gleiche URL
kann eine andere Antwort haben, kann eine neue Antwort haben, dh die Server-Antwort kann jederzeit ändern und darf nicht zwischengespeichert werden. Wenn der Benutzer nun die Antwort zwischenspeichern möchte und mehrere Anforderungen gestellt hat, kann jede Anforderung eine neue Antwort haben. Aus Gründen der Einfachheit, wenn der Benutzer die Daten zwischenspeichern möchte, muss daher jede Anforderung an NetworkDispatcher
gesendet werden.
einfach den Code lesen, wie Sie gesagt haben, Sie haben Recht, jetzt verstehe ich, Dank !!! – lingnanlu
willkommen! Übrigens, wenn Sie Volleyball-Checkout mögen https://github.com/apptik/jus :) – djodjo