2016-04-28 3 views
0

Der Code auf dem CacheDispatcher ist wie folgt. Und konzentrieren Sie sich auf das vorherige Anfrageobjekt, um zu vermeiden, dass das Anfrageobjekt verloren geht, wenn mQueue leer ist. Ich weiß nicht warum. Kann mir jemand den Grund sagen? Vielen Dank im Voraus.Eine Anmerkung auf der Volley-Note, um undicht zu werden

java 
Request<?> request; 
while (true) { 
    // release previous request object to avoid leaking request object when mQueue is drained. 
    request = null; 
    try { 
     // Take a request from the queue. 
     request = mCacheQueue.take(); 
    } catch (InterruptedException e) { 
     // We may have been interrupted because it was time to quit. 
     if (mQuit) { 
      return; 
     } 
     continue; 
    } 
} 

Antwort

1

request = mCacheQueue.take(); ein blockierenden Aufruf so ist, wenn die Warteschlange leer ist (abgelassen) werden wir nach wie vor Bezug der alten Anfrage halten während des Wartens, wenn wir nicht jedoch request = null;

zu tun hat dies ist nicht der beste Weg, um dieses Verhalten zu erreichen und es wurde in den neuen Volley-Code geändert:

while (true) { 
      try { 
       // Get a request from the cache triage queue, blocking until 
       // at least one is available. 
       final Request<?> request = mCacheQueue.take(); 
+0

Unterstanded.Thanks für Ihre Antwort. – aheadlcx

Verwandte Themen