0

谁能解释一下不正是发生(的Asynctask生命周期),举例来说,如果我有和ActivityFragment从这个Fragment我执行Asynctask其中在onPreExecute我开始显示ProgressDialog,并在一些点我关闭应用程序,而Asynctask仍在运行?的AsyncTask生命周期的一个片段内

据我已检查Fragment不叫onDetach也不onDestroyAsynctask没有达到onPostExecute方法或onCancelled

+0

让我知道你的问题很明显。你需要知道..生命周期如何片段是否行得通呢?或Asynctask? –

+0

你可以发布你的Asynctask代码,以及你的执行方式 –

回答

1

你有没有在你的片段设置setRetainInstance(真),每次启动与setRetainInstance作为真正的任务片段里面的AsyncTask将继续在不中断背景,是不是在一个活动

2

的情况下,如果我没看错你所熟悉的的AsyncTask的生命周期运行。如果没有,请

https://developer.android.com/reference/android/os/AsyncTask.html

要回答为什么onPostExecute方法不叫当我们退出该应用程序,而进度条仍然在运行,我会说这是因为,在持有该活动/上下文的引用这将在时间进度条被破坏决定它的任务是完成(BG任务/线程)。如何由Alex洛克伍德处理的AT WRT片段和活动

非常有用的博客。

http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html

0

请确保AsyncTask.doInBackground()已经完成。或者说,更重要的是可能的,你的主线程被卡住的地方作为AsyncTask.onPostExecute()必须在主线程中执行。

0

在你所说的场景中,将调用片段方法“onPause()”和“onStop()”(除了包含给定片段的Activity之外)。

由于这些方法被调用,你应该根据你想在的AsyncTask做什么反应。

如果不是这种情况,请参考#stack_ved给出的链接。

无论如何,如果你想要做的任何种类的负载的片段里,我强烈建议您使用“装载机”或“AsyncTaskLoader”。

https://developer.android.com/reference/android/content/AsyncTaskLoader.html

+0

所以现在我的疑问是,为什么它似乎是由于进度对话框导致的内存泄漏,例如,我在一个片段或活动中显示一个ProgressDialog,并且我不排除它,但似乎并没有发生,如果我有一个片段AsynctTask在其中关闭onPostExecute方法的对话框并显然永远不会被调用,因为我在AT完成之前关闭应用程序。 –

+0

问题是AsyncTask没有与Android生命周期链接(所以你将不得不为AsncTask管理Activity和Fragment中发生的所有事件)。这就是为什么我建议你使用装载机。 – zapotec