2014-04-21 84 views
2

關於Volley library爲Android:凌空內存泄漏請求

如果我做了很多HEAD請求,我的設備會迅速運行OUF的內存。 發生這種情況的原因似乎是Volley即使在HEAD請求中也基於內容長度分配內存,例如在BasicNetwork.java的第212行。

new PoolingByteArrayOutputStream(mPool, (int) entity.getContentLength());

我在做什麼:

RequestQueue mRequestQueue = Volley.newRequestQueue(this); 
for(link : various_links_of_mp3_files){ 
    StringRequest req = new StringRequest(Method.HEAD, URL, null); 
    mRequestQueue.add(req) 

是任何人都遇到同樣的問題?這是一個錯誤還是隻是我的錯? 預先感謝您。

+0

你如何處理你的請求的答案?我也嘗試使用Method.HEAD,但即使URL是正確的,我總是會得到一個錯誤(特別是com.android.volley.NoConnectionError:java.io.EOFException)。 –

回答

3

我已經設法解決它自己,這是一個庫錯誤。 如果有人有同樣的問題,你必須添加以下附加IF statment在行110 BasicNetwork.java

// If request method is HEAD, there is no need to allocate 
// memory 
if (request.getMethod() == Request.Method.HEAD) { 
    responseContents = new byte[0]; 
} 
// Some responses such as 204s do not have content. We must 
// check. 
else if (httpResponse.getEntity() != null) { 
    responseContents = entityToBytes(httpResponse.getEntity()); 
} else { 
    // Add 0 byte response as a way of honestly representing a 
    // no-content request. 
    responseContents = new byte[0]; 
} 

這樣做,排球已經不分配Content-Length的內存。 無論如何,如果有人試圖幫助我沒有結果,謝謝。