Android 是否始终调用onActivityCreated?

Android 是否始终调用onActivityCreated?,android,android-fragments,android-lifecycle,Android,Android Fragments,Android Lifecycle,查看优秀的图表可以看出,onActivityCreated()在片段重新启动时不会被调用 我对此表示怀疑: 这是真的吗?有人可以提供一些链接来编写说明生命周期行为的文档 片段重启()到底是什么 安卓能否决定删除不可见的片段,但保留保存它们的活动 注意1:我已经测试过,在由于活动重新创建而添加片段时,以及在活动完全启动并处于活动状态后手动添加片段时,会调用onActivityCreated 注意2:我正在使用23.3.0支持版本进行测试。某些行为是否可能与以前的版本有所不同?主机活动的大多数方

查看优秀的图表可以看出,onActivityCreated()在片段重新启动时不会被调用

我对此表示怀疑:

  • 这是真的吗?有人可以提供一些链接来编写说明生命周期行为的文档
  • 片段重启()到底是什么
  • 安卓能否决定删除不可见的片段,但保留保存它们的活动
注意1:我已经测试过,在由于活动重新创建而添加片段时,以及在活动完全启动并处于活动状态后手动添加片段时,会调用onActivityCreated


注意2:我正在使用23.3.0支持版本进行测试。某些行为是否可能与以前的版本有所不同?

主机活动的大多数方法都由片段镜像

onRestart()在您的活动处于后堆栈中时调用,您点击“后退”按钮,因此无需重新创建(它只是重新启动)

有些方法在片段中不存在(如onRestart()、onRestoreInstanceState(),不知道为什么)。所以重新启动发生在主机中,它会触发片段的onStart(),onResume(),只要想想它会随着活动重新启动

另一个有着依恋和超然的故事。在某些回调中,您希望安全地使用视图树,而onActivityCreated()是一个很好的候选者,因此它不会重新启动

我猜Fragment没有onRestart(),因为它由开发人员来管理后堆栈,您可以保留片段(您不应该将其放在后堆栈中)

最好的证明就是代码。尝试使用日志记录。前一段时间,因为Steve的项目只测试了一个片段,所以我很高兴

按下一点模式(使用DynamicFragments启动Activity,然后按下back按钮),下面是一个日志:

 176448881: DynamicFragment.<init> / ctor
 176448881: DynamicFragment.onAttach / in base with context
 176448881: DynamicFragment.onAttach / in base with activity
 176448881: DynamicFragment.onAttach / out base with activity
 176448881: DynamicFragment.onAttach / out base with context
 176448881: DynamicFragment.onCreate / in base
 176448881: DynamicFragment.onCreate / out base
 176448881: DynamicFragment.onCreateView / in brand new
 176448881: DynamicFragment.onCreateView / out
 176448881: DynamicFragment.onViewCreated / in base
 176448881: DynamicFragment.onViewCreated / out base
 176448881: DynamicFragment.onActivityCreated / in base
 176448881: DynamicFragment.onActivityCreated / out base
 176448881: DynamicFragment.onViewStateRestored / in base
 176448881: DynamicFragment.onViewStateRestored / out base
 176448881: DynamicFragment.onStart / in base
 176448881: DynamicFragment.onStart / out base
 176448881: DynamicFragment.onResume / in base
 176448881: DynamicFragment.onResume / out base
 176448881: DynamicFragment.onPause / in base
 176448881: DynamicFragment.onPause / out base

 227303269: ActivityWithDynamicFragments.onCreate / in brand new
 227303269: ActivityWithDynamicFragments.onCreate / in  base
 227303269: ActivityWithDynamicFragments.onCreate / out  base
 227303269: ActivityWithDynamicFragments.onCreate / after super
 227303269: ActivityWithDynamicFragments.onContentChanged / in base
 227303269: ActivityWithDynamicFragments.onContentChanged / out base
 227303269: ActivityWithDynamicFragments.onStart / in base
 227303269: ActivityWithDynamicFragments.onStart / out base
 227303269: ActivityWithDynamicFragments.onResume / in base
 227303269: ActivityWithDynamicFragments.onResume / out base
 227303269: ActivityWithDynamicFragments.onPostResume / in base
 227303269: ActivityWithDynamicFragments.onResumeFragments / in base
 227303269: ActivityWithDynamicFragments.onResumeFragments / out base
 227303269: ActivityWithDynamicFragments.onPostResume / out base
 227303269: ActivityWithDynamicFragments.onAttachedToWindow / in base
 227303269: ActivityWithDynamicFragments.onAttachedToWindow / out base

 176448881: DynamicFragment.onSaveInstanceState / in base
 176448881: DynamicFragment.onSaveInstanceState / out base
 176448881: DynamicFragment.onStop / in base
 176448881: DynamicFragment.onStop / out base
 227303269: ActivityWithDynamicFragments.onPause / in base
 227303269: ActivityWithDynamicFragments.onPause / out base

D/NSA: onRestart
 176448881: DynamicFragment.onStart / in base
 176448881: DynamicFragment.onStart / out base
 176448881: DynamicFragment.onResume / in base
 176448881: DynamicFragment.onResume / out base
 227303269: ActivityWithDynamicFragments.onStop / in base
 227303269: ActivityWithDynamicFragments.onStop / out base
 227303269: ActivityWithDynamicFragments.onDestroy / in base
 227303269: ActivityWithDynamicFragments.onDestroy / out base
176448881:动态碎片。/执行器
176448881:DynamicFragment.onAttach/in base with context
176448881:DynamicFragment.onAttach/in base with activity
176448881:DynamicFragment.onAttach/out base带活动
176448881:DynamicFragment.onAttach/out基与上下文
176448881:DynamicFragment.onCreate/in base
176448881:DynamicFragment.onCreate/out基
176448881:DynamicFragment.onCreateView/全新
176448881:DynamicFragment.onCreateView/out
176448881:DynamicFragment.onViewCreated/in base
176448881:DynamicFragment.onViewCreated/out base
176448881:已创建/在基础中的DynamicFragment.on活动
176448881:DynamicFragment.onActivityCreated/out base
176448881:DynamicFragment.onViewStateRestored/in base
176448881:DynamicFragment.onViewStateRestored/out base
176448881:DynamicFragment.onStart/in base
176448881:DynamicFragment.onStart/out base
176448881:DynamicFragment.onResume/in base
176448881:DynamicFragment.onResume/out base
176448881:DynamicFragment.onPause/in base
176448881:DynamicFragment.on暂停/输出基
227303269:ActivityWithDynamicFragments.onCreate/in全新
227303269:ActivityWithDynamicFragments.onCreate/in base
227303269:ActivityWithDynamicFragments.onCreate/out base
227303269:ActivityWithDynamicFragments.onCreate/after super
227303269:ActivityWithDynamicFragments.onContentChanged/in base
227303269:ActivityWithDynamicFragments.onContentChanged/out base
227303269:ActivityWithDynamicFragments.onStart/in base
227303269:ActivityWithDynamicFragments.onStart/out base
227303269:ActivityWithDynamicFragments.onResume/in base
227303269:带有DynamicFragments.on Resume/out base的活动
227303269:ActivityWithDynamicFragments.onPostResume/in base
227303269:ActivityWithDynamicFragments.onResumeFragments/in base
227303269:ActivityWithDynamicFragments.onResumeFragments/out base
227303269:ActivityWithDynamicFragments.onPostResume/out base
227303269:带有动态碎片的活动。在底部/底部附着
227303269:带有动态片段的活动。连接到Windows/out base
176448881:DynamicFragment.onSaveInstanceState/in base
176448881:DynamicFragment.onSaveInstanceState/out base
176448881:动态碎片。顶部/底部
176448881:动态碎片。顶部/外部基座
227303269:ActivityWithDynamicFragments.onPause/in base
227303269:ActivityWithDynamicFragments.onPause/out base
D/NSA:重新启动
176448881:DynamicFragment.onStart/in base
176448881:DynamicFragment.onStart/out base
176448881:DynamicFragment.onResume/in base
176448881:DynamicFragment.onResume/out base
227303269:带有dynamicfragments.onStop/in base的活动
227303269:带有DynamicFragments.onStop/out base的活动
227303269:ActivityWithDynamicFragments.onDestroy/in base
227303269:ActivityWithDynamicFragments.onDestroy/out base
我们有两个术语:娱乐和重新开始

只有修改视图树(甚至是潜在的,当片段没有UI时)才能进行重新创建

重新启动发生在视图树稳定时(例如,在后堆栈中包含片段的活动,您希望将其取回)

安卓能否决定删除不可见的片段,但保留保存它们的活动

我相信Android操作系统杀戮的唯一可管理的量子是一个过程(但它不是)


至于片段,您可以查看FragmentActivity和FragmentManager的源代码(我看不到这样的流程)。

没错,创建片段与创建包含它的活动并不相同。@Nanoc我无法复制您的解释,在所有情况下,我都看到onActivityCreated被调用(活动重新创建并在活动已创建时手动添加片段)