我有一个用于获取媒体文件拇指的类。这个 Loader like 类开始一个AsyncTask
for each ImageView
(在 中调用SomeAdapter#getView()
)。任务本身做了很多事情,其中之一是调用DiskLruCache
,但是当 SD 卡被卸载时,任务仍在运行时应用程序崩溃。
如果卡状态改变,我知道如何注册。
所以我需要一种方法来停止所有正在运行的任务。你能帮忙的话,我会很高兴。
我有一个用于获取媒体文件拇指的类。这个 Loader like 类开始一个AsyncTask
for each ImageView
(在 中调用SomeAdapter#getView()
)。任务本身做了很多事情,其中之一是调用DiskLruCache
,但是当 SD 卡被卸载时,任务仍在运行时应用程序崩溃。
如果卡状态改变,我知道如何注册。
所以我需要一种方法来停止所有正在运行的任务。你能帮忙的话,我会很高兴。
只需遍历所有列表并使用以下将取消所有正在运行的异步任务。
if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING))
{
myAsyncTask.cancel(true);
}
在每个异步任务上调用 cancel(),您的异步任务必须检查 isCancelled() 是否返回 true,如果是,则从 doInBackground 返回。这都在 AsyncTask 文档中。
您的解决方案存在一个问题,已知 AsyncTasks 在某些机器人上并行工作,而在其他机器人上串行工作。并行运行它们实际上不是一个好主意。您可以考虑按照 Veaceslav Gaidarji 的建议使用 ExecutorService。
你可以试试看ExecutorService
这里
有很好的例子——如何启动异步任务,以及如何在你需要的任何时候停止它们。