防止异步任务在完成之前被杀死?

时间:2013-06-16 19:01:12

标签: android multithreading android-asynctask

在我的活动中,我有一个asynctask下载一系列图像......(可能需要一些时间,具体取决于图像的大小)...在执行asynctask之前,我在{中显示一个进度对话框{1}}和通知(当用户点击通知时,会通过进度对话框将其重定向到我的活动)。当我的asynctask完成时,在onPreExecute中,我删除对话框和通知..我通过使用onPostExecute来保存我的asynctask来处理屏幕方向,这样当屏幕旋转时,我检查任务是否仍在运行如果它仍然在onRetainNonConfigurationInstance

中运行,我会显示进度对话框

问题:有时候:我的asynctask只下载了1个文件,似乎它被杀死了......(在logcat中没有异常)......结果,我的通知总是在那里,我的进度对话框也......他们无限期地留在那里......

我在那里尝试了Jeff Axelrod的解决方案:How can I ensure an AsyncTask is completed before my activity is killed?

onCreate

似乎可以解决问题,但问题是我的It looks like if I override the onPause() event in my activity, and from within the overridden onPause(), I call cancel(false) on the AsyncTasks, then the activity is not destroyed until the AsyncTasks are completed. 不再被调用了;所有图像下载都很好,但由于onPostExecute未执行,通知和进度对话框仍然存在。

等待你的解决方案!我读取仅用于短期任务的asyntask;将使用线程和处理程序解决我的问题?如果后者没有完成,android会杀死我的活动吗?

1 个答案:

答案 0 :(得分:2)

如何处理Asynctask的最佳方法是described in this article

简而言之,我们的想法是将AsyncTask与setRetainInstance(true);保持在片段中,这样可以保持You AsyncTask在用户处于保持此片段的活动时保持活动状态,并且在配置更改(方向更改)时不会被销毁。 / p>

如果您需要在用户离开Activity后运行AsyncTask,例如转到下一个Activity但您希望下载继续您应该使用services