您的位置:首页 > 移动开发 > Android开发

Fragment详解(四)Fragment生命周期

2016-03-23 14:33 507 查看
Fragment的生命周期与管理Activity生命周期很相似。和Activity一样,Fragment也以三种状态存在:

恢复:

Fragment在运行中的Activity中可见。

暂停:

另一个Activity位于前台并具有焦点,但此Fragment所在的Activiy任然可见(前台Activity部分透明或未覆盖整个屏幕)。

停止:

Fragment不可见。宿主Activity已经停止,Fragment已从Activity中删除,但已添加到返回栈中。停止Fragment仍然处于活动状态(系统会保留所有状态和成员信息)。不过,它对用户不可见,如果Activity被终止,它也会被终止。

同样与 Activity 一样,假使 Activity 的进程被终止,而您需要在重建 Activity 时恢复片段状态,您也可以使用 Bundle 保留片段的状态。您可以在片段的 onSaveInstanceState() 回调期间保存状态,并可在 onCreate()、onCreateView() 或 onActivityCreated() 期间恢复状态。

Activity 生命周期与片段生命周期之间的最显著差异在于它们在其各自返回栈中的存储方式。 默认情况下,Activity 停止时会被放入由系统管理的 Activity 返回栈。不过,仅当你在删除Fragment的事务执行期间通过调用 addToBackStack() 显式请求保存实例时,系统才会将Fragment放入由宿主 Activity 管理的返回栈。

在其他方面,管理Fragment生命周期与管理 Activity 生命周期非常相似。 因此,管理 Activity 生命周期的做法同样适用于片段。 但您还需要了解 Activity 的生命周期对Fragment生命周期的影响。

注意:如需 Fragment 内的某个 Context 对象,可以调用 getActivity()。但要注意,请仅在片段附加到 Activity 时调用 getActivity()。如果片段尚未附加,或在其生命周期结束期间分离,则 getActivity() 将返回 null。



Fragment所在的 Activity 的生命周期会影响片段的生命周期,其表现为,Activity 的每次生命周期回调都会引发每个Fragment的类似回调。 例如,当 Activity 收到 onPause() 时,Activity 中的每个片段也会收到 onPause()。

不过,Fragment还有几个额外的生命周期回调,用于处理与 Activity 的唯一交互,以执行构建和销毁片段 UI 等操作。这些额外的回调方法是:

onAttach()

在片段已与 Activity 关联时调用(Activity 传递到此方法内)。

onCreateView()

调用它可创建与Fragment关联的视图层次结构。

onActivityCreated()

在 Activity 的 onCreate() 方法已返回时调用。

onDestroyView()

在删除与Fragment关联的视图层次结构时调用。

onDetach()

在取消Fragment与 Activity 的关联时调用。

图示说明了受其宿主 Activity 影响的Fragment生命周期流。在该图中,您可以看到 Activity 的每个连续状态如何决定片段可以收到的回调方法。 例如,当 Activity 收到其 onCreate() 回调时,Activity 中的Fragment只会收到 onActivityCreated() 回调。

一旦 Activity 达到恢复状态,您就可以意向 Activity 添加片段和删除其中的Fragment。 因此,只有当 Activity 处于恢复状态时,Fragment的生命周期才能独立变化。

不过,当 Activity 离开恢复状态时,Fragment会在 Activity 的推动下再次经历其生命周期。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息