我想知道在Volley中取消执行中的NetworkImageView请求的正确方法。
我有一个片段用一些文本填充listview(通过使用Volley的JSON RPC调用检索),每个列表项都有一个NetworkImageView。
在我的片段的onPause()中,我有:
@Override
public void onPause() {
super.onPause();
VolleyRequestManager.getRequestQueue().cancelAll(this);
}
我对文本的每个JSON请求都相应地设置了标记:
mRequest = new JsonRpcRequest<Data>(Method.POST,
jsonRpcRequestBody,
Dataclass.class,
createSuccessListener(),
createErrorListener());
mRequest.setTag(this);
VolleyRequestManager.getRequestQueue().add(mRequest);
问题是;使用我的布局XML资源文件中定义的NetworkImageView,它们不会与JSON请求共享相同的标记,因此我相信它们不会在我的onPause()代码上取消,而是触发cancelAll(this)。有没有办法以某种方式取消相应的NetworkImageViews?或者我是否需要破解Volley的代码来添加取消所有请求的方法,而忽略标记比较?
答案 0 :(得分:6)
从视图层次结构分离时自动取消NetworkImageView。
根据Ficus Kirkpatrick(Google Play应用工程师)的Google IO演示文稿,NetworkImageView
在从视图层次结构中分离时自动取消正在进行的请求。
@ 16:35 ish in the video
如果您需要更多控制权,我不确定如何在排球Tag
上设置ImageLoader
,但我现在正在研究这个问题(为什么我遇到了这个问题)。如果我找到了什么,会更新我的答案。但是,内置的自动取消似乎是取消大多数图像请求的最合适的地方。