关于Activity和Fragment生命周期的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Activity和Fragment生命周期的问题相关的知识,希望对你有一定的参考价值。

我从ActivityFragment组件跟踪生命周期方法的回调,我有很多问题。我需要你帮助理解一些观点。

情况1:

一个具有一个片段的启动器活动,填充它。当应用程序启动时,Fragment变为活动状态,用户只能看到Fragment。

Lyfecycle:

  1. 活动:onCreate
  2. 活动:onStart
  3. 摘录:onAttach
  4. 片段:onCreate
  5. 片段:onCreateView
  6. 片段:onViewCreated
  7. 片段:onActivityCreated
  8. 活动:onResume
  9. 片段:onResume。

问题:

1)2 - 3之间没有onResume,因为活动失去焦点?

2)我不认为我理解8-9发生了什么。看起来像Fragment和Activity之间的某种“切换焦点”。好吧,我能理解:9是关于片段来到前台,采取焦点和onResume被称为。但是什么是8?当我加载Fragment(从3开始)时,Activity永远不会出现在前台。

情况2:

像情况1,但现在FragmentActivity加载,我按下Home:

  1. 活动:onPause
  2. 片段:onPause
  3. 活动:onStop
  4. 片段:onStop

问题:

当我运行它时,我期待另一种行为。我认为Fragment应该是第一个调用stop方法的人,比如(Fragment onPause - > Fragment onStop - > Activity方法)。为什么这样工作?

情况3:

与情况2一样,带片段的活动又回到了前台。我记得,他们都有Stopped状态(因为onStop被称为)。

  1. 活动:onStart
  2. 活动:onResume
  3. 片段:onResume

问题:

我期待1-2,但我希望Fragment调用onStart,因为,如果我理解它是正确的,onStart在片段变得可见时调用。为什么没有叫onStart

答案

片段和活动生命周期并行工作。一旦活动和片段都被创建,它们的生命周期之间的线性依赖就会结束。

following figure解释了两个生命周期是如何相互关联的。

enter image description here

请注意,片段和活动的onStartonResume(以及类似地,onStoponPause)并行执行,并且不保证顺序。有时片段优先于活动,反之亦然。

唯一的保证是活动的onCreate将始终首先被调用。在那之后,片段自行发挥作用。

以上是关于关于Activity和Fragment生命周期的问题的主要内容,如果未能解决你的问题,请参考以下文章

Fragment与Activity生命周期关系

Fragment和Activity生命周期以及横竖屏切换对生命周期的影响

Fragment生命周期

Fragment的生命周期

Fragment的生命周期

Fragment生命周期