- 原文地址:The Android Lifecycle cheat sheet — part III : Fragments
- 原文作者:Jose Alcérreca
- 译文出自:掘金翻译计划
- 本文永久链接:github.com/xitu/gold-m…
- 译者:Qiuk17
- 校对者:xiaxiayang, DevMcryYu
本系列文章:
第一部分:Activities — 单一 activity 的生命周期
第二部分:多个 activities — 跳转和返回栈(back stack)
第三部分: Fragments — Activity 和 Fragment 的生命周期(即本文) 第四部分:ViewModels、透明 Activities 及启动模式
为了更方便地查询,你可以去查阅 PDF 版本的图表备忘录。
本节中我们将介绍依附在 Activity 上的 Fragment 的行为。不过别把这种情况和加入到返回栈的 Fragment 搞混了(请参看 Tasks and Back Stack 这篇文章来学习有关 Fragment 事务和返回栈的知识)。
场景 1:当带有 Fragment 的 Activity 启动和终止时
场景 1:当带有 Fragment 的 Activity 启动和终止时
虽然 Activity 的 onCreate
方法保证在 Fragment 的 onCreate
方法之前被调用,但是其它像 onStart
和 onResume
这样的回调会被并行执行,因此它们会被以任意顺序调用。例如,系统可能先调用 Activity 的 onStart
方法再调用 Fragment 的 onStart
,但在此之后却先调用 Fragment 的 onResume
方法再执行 Activity 的 onResume
。
小心管理它们执行的顺序和时间,以避免两者竞争带来的问题。
场景 2:当带有 Fragment 的 Activity 被旋转时
场景 2:当带有 Fragment 的 Activity 被旋转时
状态管理
Fragment 状态的保存和恢复与 Activity 状态非常相似,区别在于 Fragment 中没有 onRestoreInstanceState
方法,但是 Fragment 的 onCreate
、onCreateView
和 onActivityCreated
方法中的 Bundle 对象是可被获取的。
Fragment 是可以被保留的,这意味着当配置被改变时可以使用同一个 Fragment 实例。正如接下来的场景中所描述的,被复用的 Fragment 与普通 Fragment 有些许不同。
场景 3:当带有可被复用的 Fragment 的 Activity 被旋转时
场景 3:当带有可被复用的 Fragment 的 Activity 被旋转时
Fragment 对象既没有被创建也没有被销毁,因为在 Activity 被重新创建后,同一个 Fragment 实例被复用了。因此在 onActivityCreated
过程中 Bundle 仍然是可被获取的。
使用可被复用的 Fragment 是不被推荐的,除非你想在配置改变时使用非 UI 的 Fragment 来存储数据。它的功能和内部组件库中的 ViewModel 相同,但 ViewModel 具有更简洁的 API。
如果发现译文存在错误或其他需要改进的地方,欢迎到 掘金翻译计划 对译文进行修改并 PR,也可获得相应奖励积分。文章开头的 本文永久链接 即为本文在 GitHub 上的 MarkDown 链接。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。
转载于:https://juejin.im/post/5ca3517a6fb9a05e462b967a
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101006.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...