活动与片段生命周期

时间:2014-04-11 05:53:04

标签: android android-fragments

我正在使用ActivityFragment的新应用程序。它们之间有什么主要区别?

更新

我在Android文档中找到了我想要的答案。

文档描述

  

活动与片段之间生命周期中最显着的差异是如何将其存储在其各自的后台堆栈中。默认情况下,活动被置于由系统停止时由系统管理的活动的后堆栈中(以便用户可以使用“后退”按钮导航回到它,如“任务”和“后台堆栈”中所述)。但是,只有当您在删除片段的事务期间通过调用addToBackStack()显式请求保存实例时,才会将片段放入由主机活动管理的后台堆栈中。

主机Activity是否保留与其关联的不同Fragment的不同后备堆栈以及单个应用程序保留多个堆栈的任何情况。 ??

3 个答案:

答案 0 :(得分:47)

 Differences between Activity and Fragment lifecyle in Android

片段是活动的一部分,它为该活动贡献自己的UI。片段可以被视为子活动。 片段用于在更宽屏幕设备中有效地使用空间。

根据屏幕大小,活动可能包含0个或多个片段。片段可以在多个活动中重用,因此它在活动中就像一个可重用的组件。

片段不能独立存在。它应该始终是活动的一部分。活动可以存在,其中没有任何片段。

片段生命周期比活动生命周期更复杂,因为它具有更多状态。生命周期状态如下所示:

enter image description here

<强> onInflate

在片段生命的最开始,调用onInflate方法。在这个方法中,我们可以保存一些配置参数和一些属性在XML布局文件中定义。

<强> onAttach

在此步骤之后调用onAtchch。一旦片段“附加”到“父”活动,就会调用此方法,我们可以使用此方法存储有关活动的引用。

<强>的onCreate

这是最重要的一步,我们的片段在创作过程中。此方法可用于启动某些线程以检索数据信息,可能来自远程服务器。 onCreateView 是片段必须创建其视图层次结构时调用的方法。在此方法中,我们将在片段内扩展布局。

在此阶段,我们无法确定我们的活动是否仍然创建,因此我们无法指望它进行某些操作。我们会在 onActivityCreated 中创建并准备好“父亲”活动时收到通知。

从现在开始,我们的活动已经生效并创建,我们可以在需要时使用它。

<强>在onStart

下一步是 onStart 方法。在这里我们执行onStart活动中常见的事情,在此阶段我们的片段是可见的,但它仍然没有与用户交互。

<强>的onResume

当片段准备好与用户交互时 onResume 被调用。

然后可能会发生活动暂停,因此调用活动的 onPause 。那么 onPause 片段方法也被调用。

之后,操作系统可能会决定销毁我们的片段视图,因此会调用 onDestroyView 。之后,如果系统决定关闭我们的片段,则调用 onDestroy 方法。

这里我们应该释放所有连接活动等等因为我们的片段接近死亡。即使是在破坏阶段,它仍然依附于父亲的活动。最后一步是将片段与活动分离,并在调用 onDetach 时发生。

我希望你能从中理解。

感谢。

答案 1 :(得分:9)

直接来自开发人员碎片指南 -

片段所在活动的生命周期直接影响片段的生命周期,因此活动的每个生命周期回调都会为每个片段产生类似的回调。

例如,当活动收到onPause()时,活动中的每个片段都会收到onPause()

片段有一些额外的生命周期回调,但它们处理与活动的独特交互,以便执行构建和销毁片段的UI等操作。这些额外的回调方法是:

1) onAttach() =&gt;

  

当片段与活动相关联时调用(   活动在这里传递。)

2) onCreateView() =&gt;

  

调用以创建与片段关联的视图层次结构。

3) onActivityCreated() =&gt;

  

当活动的onCreate()方法返回时调用。

4) onDestroyView() =&gt;

  

当与片段关联的视图层次结构正在进行时调用   除去。

5) onDetach() =&gt;

  

当片段与活动解除关联时调用。

activity达到恢复状态后,您可以自由地将fragments添加到activity。因此,只有当活动处于恢复状态时,片段的生命周期才能独立发生变化。

但是,当activity离开恢复状态时,fragment再次被activity推送到其生命周期。

检查Activity and Fragments

答案 2 :(得分:0)

在某种意义上它是相似的。两者都会获得生命周期,直到它们存在于屏幕上。如果您的活动已关闭,则会在以后停止并销毁。类似地,如果碎片中的碎片不再可用,则碎片会被破坏。但由于片段存在于活动内部,因此只要其他片段替换此片段,就可能会破坏片段。因此它拥有一个类似但不同的生命周期。

相关问题