android – Volley framewok请求将对象保存在内存中
作者:互联网
我正以这种方式提出截击请求:
public void makeRequest(BaseRequest request, Response.Listener<JSONObject> responseListener,
Response.ErrorListener errorListener) {
if (Constants.DEBUG) Log.i(TAG, "Sending: " + request.getUrlRequest());
JsonObjectRequest jsObjRequest = new JsonObjectRequest(METHOD, request.getUrlRequest(), null, responseListener, errorListener);
// disable cache
jsObjRequest.setShouldCache(false);
jsObjRequest.setTag(mTag);
mQueue.add(jsObjRequest);
}
mTag是一种类型.我有一个活动,在onCreate方法中我用这个调用了一个排球请求:
mVolleyManager.makeRequest(getRequest(), new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
refreshLayout.setRefreshing(false);
onEndLoading(response);
}
}, new Response.ErrorListener() {
@Override
public void one rrorResponse(VolleyError error) {
refreshLayout.setRefreshing(false);
one rrorLoading(error);
}
});
如果我开始打开并关闭活动一段时间,我的记忆会不断增长,直到达到OOM错误.我试着看一下MAT,结果如下:
看起来Volley在内存中保留了所有请求,即使正确调用onResponse方法也是如此.我已经通过切换到Retrofit解决了这个问题.相同的代码,相同的请求和它的工作,但我想了解可能是我的问题的原因.
解决方法:
默认情况下,NetworkDispatcher只有4个线程,所以我认为你的问题是由创建多个请求队列引起的,旧线程没有被杀死,使用单例队列,用于引用那个看:
http://developer.android.com/training/volley/requestqueue.html
每个请求队列只有4个线程但在你的图像中我可以看到超过4个,所以显然你的问题是由于不使用单例设计模式造成的.
标签:android-networking,android,android-volley 来源: https://codeday.me/bug/20191003/1849756.html