繁体   English   中英

片段内的Asynctask生命周期

[英]Asynctask lifecycle inside a Fragment

任何人都可以解释到底发生了什么( Asynctask生命周期),例如,如果我有一个带有Fragment Activity ,并从该Fragment执行一个Asynctask ,在onPreExecute我开始显示一个ProgressDialog并在关闭Asynctask关闭该应用程序还在运行?

虽然我已经检查迄今为止Fragment不叫onDetach也没有onDestroyAsynctask没有达到onPostExecute方法或onCancelled

如果我没有记错,您会熟悉AsyncTask的生命周期。 如果没有,请参考

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

要回答为什么在进度栏仍在运行时退出应用程序时未调用onPostExecute方法的原因,我想说这是因为,AT保留了对Activity / Context的引用,当进度栏确定其工作是完成(任务/线程)。

Alex Lockwood撰写的关于如何处理ATs wrt片段和活动的非常有用的博客。

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

您是否在片段中设置了setRetainInstance(true),每当您在片段中将setRetainInstance设置为true时启动asynctask时,任务将继续在后台运行而不会中断,这在活动情况下不会

请确保AsyncTask.doInBackground()已完成。 或者,更有可能的是,您的主线程卡在了某个地方,因为必须在主线程中执行AsyncTask.onPostExecute()。

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

在调用这些方法时,您应该根据要在AsyncTask中执行的操作做出反应。

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

无论如何,如果您想在Fragment中进行任何类型的加载,强烈建议您使用“ Loaders”或“ AsyncTaskLoader”。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM