0

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

问题:有时:我的 asynctask 只下载 1 个文件,似乎它被杀死了......(在 logcat 中也不例外)......结果,我的通知总是在那里,我的进度对话框也......并且它们仍然存在无限期……

我在那里尝试了 Jeff Axelrod 的解决方案:如何确保 AsyncTask 在我的活动被杀死之前完成?

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. 

似乎可以解决问题,但问题是 myonPostExecute不再被调用;所有图像下载正常但未onPostExecute执行,通知和进度对话框仍然永远存在。

等待您的解决方案伙计们!我只为短任务阅读了使用 asyntask;线程和处理程序的使用会解决我的问题吗?如果后者没有完成,android会杀死我的活动或线程吗?

4

1 回答 1

2

本文介绍了如何处理 Asynctask 的最佳方法。

简而言之,这个想法是将 AsyncTask 保持在片段中,setRetainInstance(true);这些将使 You AsyncTask 在用户处于活动状态时保持活动状态,并且不会在配置更改(方向更改)时被破坏。

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

于 2013-06-16T19:28:09.260 回答