2016-04-01 2 views
0

I weiß, dass mWaitingRequest die Anforderungen halten, die den gleichen CacheKey haben, wenn eine Anforderung abgeschlossen ist, werden die Anfragen mit dem gleichen CacheKey zum mCacheQueue hinzugefügt werden.Warum ein mWaitingRequests in Request in Volley dort

Aber ich denke nicht, dass dies notwendig ist, warum nicht einfach die Anfrage mit dem gleichen CacheKey direkt an die mCacheQueue hinzufügen?

Ich suche nur Google, aber bekomme nicht die Antwort.

Antwort

1

denn dann wird es keinen Cache für sie und alle auf die networkqueue gehen und u dont wollen, dass

+0

einfach den Code lesen, wie Sie gesagt haben, Sie haben Recht, jetzt verstehe ich, Dank !!! – lingnanlu

+0

willkommen! Übrigens, wenn Sie Volleyball-Checkout mögen https://github.com/apptik/jus :) – djodjo

0

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.