[译] Android 生命周期备忘录 — 第三部分:Fragments

[译] Android 生命周期备忘录 — 第三部分:Fragments

本系列文章:
第一部分: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 方法之前被调用,但是其它像 onStartonResume 这样的回调会被并行执行,因此它们会被以任意顺序调用。例如,系统可能先调用 Activity 的 onStart 方法再调用 Fragment 的 onStart,但在此之后却先调用 FragmentonResume 方法再执行 Activity 的 onResume

小心管理它们执行的顺序和时间,以避免两者竞争带来的问题。

场景 2:当带有 Fragment 的 Activity 被旋转时

场景 2:当带有 Fragment 的 Activity 被旋转时

状态管理

Fragment 状态的保存和恢复与 Activity 状态非常相似,区别在于 Fragment 中没有 onRestoreInstanceState 方法,但是 Fragment 的 onCreateonCreateViewonActivityCreated 方法中的 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 链接。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

转载于:https://juejin.im/post/5ca3517a6fb9a05e462b967a

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101006.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 华为模拟器ensp怎么安装_模拟器下载手机版

    华为模拟器ensp怎么安装_模拟器下载手机版华为模拟器ENSP下载与安装教程【一】:安装环境1.Win10系统安装也可虚拟机安装【二】安装链接点击连接下载提取码:ob2v要是感觉下载慢的话可以开个会员(土豪随意)步骤1.下载后解压并安装,首先要先在安装这三个软件2.下面我们开始安装VirtualBox5.2.26并默认安装直接下一步就可以下面几步都是默认安装如图所示安装完成不想打开把运行勾去掉就行,点击完…

    2022年10月15日
    50
  • idea代码整理快捷键_IDEA怎么设置快捷键

    idea代码整理快捷键_IDEA怎么设置快捷键快捷键功能Ctrl+X删除行Ctrl+D复制行Ctrl+N查找类Ctrl+F查找文本Ctrl+J自动代码Ctrl+H显示类结构图Ctrl+Q显示注释文档Ctrl+P方法参数提示Ctrl

    2022年10月12日
    7
  • Visual C++学习笔记1:一定要注意ANSI和UNICODE差额

    Visual C++学习笔记1:一定要注意ANSI和UNICODE差额

    2022年1月16日
    50
  • ext表示什么_rent和lease

    ext表示什么_rent和leaseExtjs的组件有两个看起来类似的配置项,applyTo和renderTo,这两个配置项都是用来指定将该extjs组件加载到什么位置。那他们到底有什么区别呢,网上搜了下,有两篇博文也是关于这个的。ExtJS中的renderTo和applyTo的差别[url]http://hi.baidu.com/agzfsshohpcdegr/item/50370f1912dc05e3…

    2022年7月28日
    6
  • Vue 后台管理系统 Demo

    Vue 后台管理系统 DemoGITHUB 原文地址 https github com lin xin vue manage system 前言该方案作为一套多功能的后台框架模板 适用于绝大部分的后台管理系统 WebManagemen 开发 基于 vue js 使用 vue cli3 脚手架 引用 ElementUI 组件库 方便开发快速简洁好看的组件 分离颜色样式 支持手动切换主题色 而且很方便

    2026年2月1日
    0
  • DM368开发 — 你需要了解的知识点

    DM368开发 — 你需要了解的知识点一、标清、高清、全高清、超清(超高清)的区别480×320,640×480标清1024x720p高清1920x1080i(隔行扫描)也属于高清1920x1080p全高清3840×2160,7680×4320超(高)清========================================480P、720P、1080P是什么意思?720P是美国电影电视工程师协会(SMPTE

    2022年8月13日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号