2

我有一个下载 android 应用程序的文件。当用户单击 listview 项目时,会下载此文件。它工作正常。现在,我想取消当前文件下载并开始下一个文件,同时用户点击其他项目并且另一个下载已经在进行中,并在取消下载任务之前显示用户确认。

我怎样才能做到这一点?

提前致谢

4

3 回答 3

5

首先,您必须检查您的AsyncTask

// in doInBackground, check if asynctask is canceled manually 
if (isCancelled()) break;

在您的活动中,每当您尝试取消时,只需AsyncTask手动取消即可,当然,还可以重新开始下载另一个文件!

mDownloadingTask.cancel(true);
于 2012-10-29T05:02:06.477 回答
2

简单地说,您将 Asynctask 存储到一个变量中:

mDownloadingTask = new Asynctask(){...};
mDownloadingTask.execute();

当您想停止此任务并开始新任务时:

//close the current task if it # null
mDownloadingTask.cancel(true);
mDownloadingTask = null;
//Start new one
mDownloadingTask = new Asynctask(){...};
mDownloadingTask.execute();
于 2012-10-29T04:09:23.123 回答
0

Cancel(false)设置一个标志,您可以签入doInBackGround()并阻止您的代码执行其正在执行的操作。cancel(true)做同样的事情,除了它也会中断线程。在此处查看有关中断的更多信息。

当您的任务中有循环代码时,这一切都很好。循环的每次迭代,您都可以检查isCancelled().

但是正如您的问题一样,某些任务(例如下载文件)不使用循环,也许您只是在调用外部 API 方法,所以在这里,您受制于这种阻塞方法。如果设计得好,它会在中断时抛出异常,线程将终止。

另外,看看更好的实现,SafeAsyncTask

于 2012-10-29T04:30:43.123 回答