在更改活动时停止异步任务中的HTTP请求

时间:2012-01-05 18:36:16

标签: android httpclient android-asynctask

我正在活动中下载多个图像以填充列表视图,所有这些都处于单独的异步任务中。在此活动中,用户可以按下按钮转到不需要图像的另一页面。

我遇到的问题是,即使进行下一个活动,异步任务仍在运行,并且未针对下一个活动中需要进行的请求释放httpclient。

我尝试使用asynctask.cancel来执行所有正在运行的任务,但是会抛出interruptIOException。

是否还有其他优雅的方法来阻止正在冻结客户的请求?

1 个答案:

答案 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课程的某处捕获中断的异常,但这应该足以让您前进。