Android 生命周期备忘表-第三部分:Fragments

原文链接 The Android Lifecycle cheat sheet — part III : Fragments

目录

场景 1: 带有 Fragment 的 Activity starts 和 finishes

场景 2: 带有 Fragments 的 Activity 被旋转

Fragments — 场景 3: 带有被保留的 Fragment 的 Activity 被旋转


在本系列文章中:
 * 第一部分: Activities — 单个 activity 的生命
 * 第二部分: 多个 activities — 多个 activities—导航和返回栈 (本文)
 * 第三部分: Fragments— activities 和 fragment 的 生命周期
 * 第四部分: ViewModels, Translucent Activities 和 启动模式

这些图表也可作为PDF格式的备忘表提供,以供快速参考。


在本节中,我们将介绍附加到 activity 的 fragment 的行为。不要将此场景与添加到 返回栈 的 fragment 混淆(有关fragment transactions(事务) 和 返回栈 的更多信息,请参阅 Tasks and Back Stack)。

场景 1: 带有 Fragment 的 Activity starts 和 finishes

 

场景 1: 带有 Fragment 的 Activity starts 和 finishes

请注意,Activity 的 onCreate 可以确保在 Fragment 的(onCreate)之前执行。但是,并排显示的回调 - 例如 onStart 和 onResume - 是并行执行的,因此可以按任意顺序被调用。例如,系统可能会在 Fragment 的 onStart 方法之前执行 Activity 的 onStart 方法,但之后在 Activity 的 onResume 方法之前执行 Fragment 的 onResume 方法。

小心管理各个执行序列的时间安排,以避免竞争条件。


场景 2: 带有 Fragments 的 Activity 被旋转

 

场景 2: 带有 Fragments 的 Activity 被旋转

状态管理

Fragment 状态以与 activity 状态非常相似的方式保存和恢复。区别在于 fragments 中没有 onRestoreInstanceState ,但是在片段的 onCreateonCreateView 和 onActivityCreated 中可以使用 Bundle。

可以保留 Fragments,这意味着在配置更改时使用相同的实例。如下一个场景所示,这会稍微改变图表。


Fragments — 场景 3: 带有被保留的 Fragment 的 Activity 被旋转

 

场景 3: 带有被保留的 Fragment 的 Activity 被旋转

在旋转后 fragment 既不会被销毁也不会被创建,因为在重新创建 activity 后 同样的 fragment 实例被使用。在 onActivityCreated 中状态 bundle 仍然可用。

建议不要使用保留的 fragments,除非它们用于跨配置更改存储数据(在非 UI fragment 中)。这是 Architecture Components(架构组件) 库中的 ViewModel 类在内部使用的,但具有更简单的 API。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值