我有一个下载android应用程序的文件。当用户点击listview项目时,下载了这个文件。工作正常。 现在,我想取消当前文件下载并启动下一个文件,同时用户点击其他项目,另一个下载已经在进行,并在取消下载任务之前显示用户确认。
我该怎么做?
先谢谢
答案 0 :(得分:5)
首先,您必须签入AsyncTask
// in doInBackground, check if asynctask is canceled manually
if (isCancelled()) break;
在您的活动中,每当您尝试取消时,只需手动取消AsyncTask
,当然,开始新的下载另一个文件!
mDownloadingTask.cancel(true);
答案 1 :(得分: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();
答案 2 :(得分:0)
Cancel(false)
设置一个标记,您可以在doInBackGround()
中检查并停止代码执行其操作。 cancel(true)
执行相同操作,但它也会中断线程。查看有关中断here的更多信息。
当你的任务中有一个循环代码时,这一切都很好。循环的每次迭代,您都可以检查isCancelled()
。
但是在你的问题中,像下载文件这样的任务不使用循环,也许你只是调用外部API方法,所以在这里,你受这种阻塞方法的摆布。如果设计得很好,它会在中断时抛出异常,并且线程将终止。
另外,请看一下更好的实现,SafeAsyncTask