android–Volley framewok请求将对象保存在内存中

android–Volley framewok请求将对象保存在内存中,第1张

概述我正以这种方式提出截击请求:publicvoidmakeRequest(BaseRequestrequest,Response.Listener<JSONObject>responseListener,Response.ErrorListenererrorListener){if(Constants.DEBUG)Log.i(TAG,"Sending:"+reque

我正以这种方式提出截击请求:

   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请求将对象保存在内存中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1098939.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存