[英]Asynctask lifecycle inside a Fragment
任何人都可以解释到底发生了什么( Asynctask
生命周期),例如,如果我有一个带有Fragment
Activity
,并从该Fragment
执行一个Asynctask
,在onPreExecute
我开始显示一个ProgressDialog
并在关闭Asynctask
关闭该应用程序还在运行?
虽然我已经检查迄今为止Fragment
不叫onDetach
也没有onDestroy
和Asynctask
没有达到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.