取消所有AsyncTask?

时间:2012-10-19 10:03:54

标签: android android-asynctask queue

我有一个用于获取媒体文件大拇指的类。类似于类的Loader为每个AsyncTask开始ImageView(在SomeAdapter#getView()中调用)。任务本身做了很多事情,其中​​一个是调用DiskLruCache,但是当卸载SD卡时,当任务仍在运行时,应用程序崩溃。

我知道如果卡状态改变了如何注册。

所以我需要一种方法来停止所有正在运行的任务。你能帮忙的话,我会很高兴。

3 个答案:

答案 0 :(得分:8)

只需遍历所有列表&使用以下将取消所有正在运行的asynctask。

if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING))
 {
     myAsyncTask.cancel(true);
 }

答案 1 :(得分:2)

对每个asynctasks调用cancel(),你的asynctasks必须检查isCancelled()以返回true,如果是,则从doInBackground返回。这些都在AsyncTask文档中。

您的解决方案存在一个问题,已知AsyncTasks在某些机器人上并行工作,并在其他一些机器人上串行工作。实际上并行运行它们并不是一个好主意。您可以考虑使用ExecutorService作为Veaceslav Gaidarji建议。

答案 2 :(得分:1)

您可以尝试ExecutorService look here

有很好的例子 - 如何启动异步任务,以及如何在需要时随时停止它们。