2014-04-21 1 views
2

En ce qui concerne Volley library pour Android:fuite de mémoire Volley sur la tête demande

Si je fais beaucoup de requêtes HEAD, mon appareil va rapidement ouf de mémoire. La raison pour laquelle cela se produit semble être que Volley alloue de la mémoire basée sur Content-Length même dans les requêtes HEAD, par exemple à la ligne 212 de BasicNetwork.java.

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

Ce que je fais:

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

Quelqu'un est-il la même question connaît? Est-ce un bug ou juste ma faute? Merci d'avance.

+0

comment gérez-vous les réponses à vos demandes? J'essaie aussi d'utiliser Method.HEAD, mais j'ai toujours une erreur (en particulier com.android.volley.NoConnectionError: java.io.EOFException), même si l'URL est correcte. –

Répondre

3

J'ai réussi à le réparer moi-même, c'est un bug de la bibliothèque. Si quelqu'un a le même problème, vous devez ajouter les complémentaires suivantes statment à la ligne 110 de 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]; 
} 

Ce faisant, Volley ne pas allouer plus de mémoire Content-Length. Merci quand même si quelqu'un a essayé de m'aider avec aucun résultat.