【发布时间】:2014-11-10 04:38:29
【问题描述】:
我以这种方式提出截击请求:
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 onErrorResponse(VolleyError error) {
refreshLayout.setRefreshing(false);
onErrorLoading(error);
}
});
如果我开始打开和关闭活动一段时间,我的内存会不断增长,直到达到 OOM 错误。我试着用 MAT 看看,结果如下:
似乎 Volley 将所有请求都保存在内存中,即使正确调用了 onResponse 方法也是如此。我已经通过改用改造解决了这个问题。相同的代码,相同的请求并且它正在工作,但我想了解我的问题可能是什么原因。
【问题讨论】:
-
你使用单例队列吗?
-
天哪.. 我想实现它,但在这种特殊情况下,我没有使用单例。这可能是问题所在,对吧?
标签: android android-volley android-networking