5

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

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

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

4

3 回答 3

8

只需遍历所有列表并使用以下将取消所有正在运行的异步任务。

if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING))
 {
     myAsyncTask.cancel(true);
 }
于 2012-10-19T10:09:25.763 回答
2

在每个异步任务上调用 cancel(),您的异步任务必须检查 isCancelled() 是否返回 true,如果是,则从 doInBackground 返回。这都在 AsyncTask 文档中。

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

于 2012-10-19T10:16:05.530 回答
1

你可以试试看ExecutorService 这里

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

于 2012-10-19T10:12:00.757 回答