我有一个用于获取媒体文件大拇指的类。类似于类的Loader为每个AsyncTask
开始ImageView
(在SomeAdapter#getView()
中调用)。任务本身做了很多事情,其中一个是调用DiskLruCache
,但是当卸载SD卡时,当任务仍在运行时,应用程序崩溃。
我知道如果卡状态改变了如何注册。
所以我需要一种方法来停止所有正在运行的任务。你能帮忙的话,我会很高兴。
答案 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
有很好的例子 - 如何启动异步任务,以及如何在需要时随时停止它们。