原文地址: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。
作者:掘金翻译计划
链接:https://juejin.im/post/5ca3517a6fb9a05e462b967a
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。