我正在活动中下载多个图像以填充列表视图,所有这些都处于单独的异步任务中。在此活动中,用户可以按下按钮转到不需要图像的另一页面。
我遇到的问题是,即使进行下一个活动,异步任务仍在运行,并且未针对下一个活动中需要进行的请求释放httpclient。
我尝试使用asynctask.cancel来执行所有正在运行的任务,但是会抛出interruptIOException。
是否还有其他优雅的方法来阻止正在冻结客户的请求?
答案 0 :(得分:1)
理想情况下,您希望在这些情况下执行的操作是将HTTP请求包装在可以取消的循环中。以this问题为例(完全实现):
@Override
protected Void doInBackground(Void... params) {
while (running) {
// loop your HTTP requests here
}
return null;
}
当您触发onCancelled()
方法时(通过调用cancel
),您的doInBackground
方法会在当前HTTP请求完成后立即终止 (并且不之前)。
这可能是您使用AsyncTask
获得的最优雅的解决方案。此外,您可能必须在AsyncTask
课程的某处捕获中断的异常,但这应该足以让您前进。