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

Questions about Activity and Fragment lifecycle

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

情况一:

一个 launcher Activity 和一个 Fragment,填充它。当应用程序启动时,Fragment 变为活动状态,用户只能看到 Fragment。

生命周期:

  1. Activity: onCreate

  2. Activity: onStart

  3. 片段:onAttach

  4. 片段:onCreate

  5. 片段:onCreateView

  6. 片段:onViewCreated

  7. 片段:在Activity创建

  8. Activity: onResume

  9. 片段:onResume.

问题:

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

2) 我不认为我理解 8 - 9 发生了什么。它似乎是 Fragment 和 Activity 之间的某种 "switch focus"。好的,我明白了:9是关于Fragment来到前台,聚焦并调用onResume。但是8是什么?当我加载 Fragment(从 3 开始)时,Activity 永远不会出现在前台。

情况二:

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

  1. Activity: onPause
  2. 片段:onPause
  3. Activity: onStop
  4. 片段:onStop

问题:

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

情况三:

和情况2一样,ActivityFragment回到前台。我记得,他们都有 Stopped 状态(因为 onStop 被调用)。

  1. Activity: onStart
  2. Activity: onResume
  3. 片段:onResume

问题:

我预计 1-2,但我预计 Fragment 调用 onStart,因为,如果我理解正确,onStart 在片段变为可见的。为什么 onStart 没有被调用?

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

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

请注意,片段和 activity 的 onStartonResume(以及类似地,onStoponPause)并行执行,并且没有保证订单。有时片段会优先于 activity,反之亦然。

唯一的保证是 activity 的 onCreate 总是首先被调用。之后fragment就自己行动了。