我从Activity
和Fragment
组件跟踪生命周期方法的回调,并且我有很多问题。我需要您的帮助来理解一些要点。
情况1:
一个启动器活动和一个片段,将其填充。当应用启动时,Fragment变为活动状态,用户只能看到Fragment。
Lyfecycle:
活动:onCreate
活动:onStart
片段:onAttach
片段:onCreate
片段:onCreateView
片段:onViewCreated
片段:onActivityCreated
活动:onResume
片段:onResume。
问题:
1)由于活动失去了焦点,2-3之间没有onResume
吗?
2)我不认为我理解8-9发生了什么。这似乎是Fragment和Activity之间的某种“切换焦点”。好的,我可以理解:9是关于Fragment出现在前台,聚焦并调用了onResume
。但是8是多少?当我加载Fragment(从3开始)时,Activity永远不会处于前台。
情况2:
就像情况1一样,但是现在Fragment
和Activity
已加载,我按了 Home :
问题:
当我运行它时,我期望另外一种行为。我认为Fragment应该是第一个调用stop方法的人,例如(Fragment onPause-> Fragment onStop-> Activity方法)。为什么这样工作?
情况3:
类似于情况2,活动和片段回到了前台。我记得他们俩都拥有Stopped
的身份(因为有人叫onStop
)。
问题:
我希望1-2,但是我希望 Fragment 调用onStart
,因为如果我理解正确的话,onStart
在片段可见时调用。为什么没有叫onStart
?
答案 0 :(得分:3)
片段和活动生命周期并行工作。一旦创建了活动和片段,它们的生命周期之间的线性依赖关系就结束了。
following figure解释了两个生命周期如何相互联系。
请注意,片段和活动的onStart
和onResume
(以及类似的onStop
和onPause
)是并行执行的,因此不能保证顺序。有时,片段优先于活动,反之亦然。
唯一的保证是,活动的onCreate
将始终被首先调用。之后,片段会自行起作用。