系统相关
首页 > 系统相关> > android – Volley framewok请求将对象保存在内存中

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