2016-04-28 9 views
0

CacheDispatcherのコードは次のとおりです。その前のリクエストオブジェクトをリリースすることに注目して、mQueueが流出したときに要求オブジェクトが漏れないようにします。 私は理由を知らない。誰か私に理由を教えてもらえますか? ありがとうございます。漏れを防ぐためのバレーノートの注釈

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; 
    } 
} 

答えて

1

request = mCacheQueue.take();ブロッキング呼び出しはそうキューが空のときに我々はrequest = null;

これをしなかった場合には待っている間に(排水)我々はまだ古い要求の参照を保持しますが最善の方法ではありませんこの行動を達成するために新しいVolleyコードで変更されました:

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

あなたの答えはありがたいです。 – aheadlcx

関連する問題