我正以这种方式提出截击请求:
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 – Volley framewok请求将对象保存在内存中全部内容,希望文章能够帮你解决android – Volley framewok请求将对象保存在内存中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)