HEAD请求中的凌空内存泄漏

时间:2014-04-21 22:15:01

标签: android out-of-memory head android-volley

关于Android的Volley library

如果我发出很多HEAD请求,我的设备将快速运行内存。 发生这种情况的原因似乎是Volley即使在HEAD请求中也基于Content-Length分配内存,例如在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)

有没有人遇到同样的问题?这是一个错误还是我的错? 提前谢谢。

1 个答案:

答案 0 :(得分:3)

我自己设法修复了它,这是一个库错误。 如果有人遇到同样的问题,您必须在BasicNetwork.java的第110行添加以下额外的IF声明

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

这样做,Volley不再分配Content-Length内存。 无论如何,如果有人试图帮助我没有结果,那就谢谢了。