关于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)
有没有人遇到同样的问题?这是一个错误还是我的错? 提前谢谢。
答案 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内存。 无论如何,如果有人试图帮助我没有结果,那就谢谢了。