我有一个用于获取媒体文件缩略图的类。这个类类似于Loader,为每个ImageView(在SomeAdapter#getView()中调用)启动一个AsyncTask。任务本身会做很多事情,其中之一是调用DiskLruCache,但当SD卡已卸载但任务仍在运行时,应用程序会崩溃。
我知道如何注册卡状态是否改变。
因此,我需要一种方法来停止所有正在运行的任务。任何帮助都将是不错的。
我知道如何注册卡状态是否改变。
因此,我需要一种方法来停止所有正在运行的任务。任何帮助都将是不错的。
只需遍历整个列表并使用以下内容,即可取消所有正在运行的异步任务。
if(myAsyncTask.getStatus().equals(AsyncTask.Status.RUNNING))
{
myAsyncTask.cancel(true);
}
在每个异步任务上调用cancel()方法,你的异步任务必须检查isCancelled()以返回true,如果是这样,则从doInBackground返回。这都在AsyncTask文档中有说明。
您的解决方案存在一个问题,就是AsyncTasks已知在某些Android设备上并行工作,在其他一些设备上则串行工作。实际上,同时运行它们并不是一个好主意。您可以考虑使用ExecutorService,正如Veaceslav Gaidarji所建议的那样。