Android 系统的目的是让用户增强控制权并且让他们简便地使用应用程序。例如,一个 app 的用户可能会旋转屏幕,回复一条通知信息,或者切换到另一个任务,而用户应该能够在这类操作后继续流畅地使用这个 app。

为了提供这种用户体验,你应该知道怎么管理组件的生命周期。组件可以是一个 Activity,一个 Fragment,一个 Service,或者 Application 本身,甚至是在默默运行的进程。组件有生命周期,生命周期会在多种状态中变换。当状态发生变化时,系统会通过一个生命周期回调方法通知你。

为了更好解释生命周期是怎么运作的,我们定义了根据现有组件进行分类的一系列用户场景。

第一部分: Activities — 单一 activity 的生命周期 (就是本文)

第二部分: 多个 activities — 跳转和返回栈(back stack)

第三部分: Fragments — activity 和 fragment 的生命周期

它们的图表也提供了 PDF格式备忘录,以方便查阅。


除非特别说明,接下来的这些场景展示了这些组件的默认行为。

如果你发现有错误或者遗漏了什么重要的东西,请在下方评论。

第一部分: Activities

单一 Activity — 场景 1:应用被结束并且重启

触发原因:

  • 用户按下了 返回键,或者是
  • Activity.finish() 方法被调用

这个最简单的场景说明了一个单一 activity 的应用被用户开启,结束,和重启时发生了什么:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a1e8t9sx-1629791489472)(https://user-gold-cdn.xitu.io/2018/2/1/16151b5f2040aae8?imageView2/0/w/1280/h/960/ignore-error/1)]

场景 1:应用被终止并且重启

状态处理

  • onSaveInstanceState 不会被调用 (因为 activity 被结束了,你不需要保存状态)
  • onCreate 没有 Bundle 对象,如果重新打开应用的话。因为先前的 activity 结束了,也不需要恢复状态。

单一 Activity — 场景 2:用户切换出去

触发原因:

  • 用户按了 Home 键
  • 用户切换到另一个应用(点击虚拟按键(Overview menu),点击一个通知,接听来电,等等)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qHRLowOV-1629791489474)(https://user-gold-cdn.xitu.io/2018/2/1/16151b5f7592b193?imageView2/0/w/1280/h/960/ignore-error/1)]

场景 2:用户切换出去

在这个场景中系统会 stop 这个 activity,但不会马上结束它。

状态处理

当你的 activity 进入 Stopped 状态,系统会使用 onSaveInstanceState 去保存应用的状态以防系统一段时间后终止这个应用的进程 (请看下面)

假设应用的进程没有被终止,这个应用的实例会常驻在内存,保存所有状态。当这个 activity 回到前台工作时,它会恢复这些状态。你不需要重新初始化这些之前已生成的组件。


单一 Activity — 场景 3:配置发生变化

触发原因:

  • 配置发生变化,例如屏幕旋转
  • 在多窗口模式下,用户调整窗口大小

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6GakOqkK-1629791489475)(https://user-gold-cdn.xitu.io/2018/2/1/16151b5f20474756?imageView2/0/w/1280/h/960/ignore-error/1)]

场景 3:屏幕旋转或其他配置变化

状态处理

像屏幕旋转或窗口大小改变,这种配置变化应该能够让用户在变化后继续无缝使用。

  • activity 会被完全 destroy,但是 activity 的状态会被保存下来并在下一个实例中恢复
  • onCreateonRestoreInstanceState 中的 Bundle 对象是相同的。

单一 Activity — 场景 4:应用被系统暂停

触发原因:

  • 开启多窗口模式 (API 24+)并且应用失去焦点
  • 另一个应用部分地覆盖在正在运行的应用上面(例如一个购买对话框,一个运行时权限确认对话框,一个第三方登陆对话框…)
  • 调用意图选择器,例如调用了分享对话框

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-92p7SpLH-1629791489476)(https://user-gold-cdn.xitu.io/2018/2/1/16151b5f2028f868?imageView2/0/w/1280/h/960/ignore-error/1)]

场景 4:应用被系统暂停

这个场景不适用于以下情况:

  • 对话框属于同一个应用。弹出一个警告对话框或者一个 DialogFragment 并不会暂停(执行 onPause 方法)被遮挡住的 activity。
  • 通知。用户收到一个新通知或者拉下通知栏不会暂停被遮挡住的 activity。

延伸阅读


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

最后

按照国际惯例,给大家分享一套十分好用的Android进阶资料:《全网最全Android开发笔记》。

整个笔记一共8大模块、729个知识点,3382页,66万字,可以说覆盖了当下Android开发最前沿的技术点,和阿里、腾讯、字节等等大厂面试看重的技术。

图片

图片

因为所包含的内容足够多,所以,这份笔记不仅仅可以用来当学习资料,还可以当工具书用。

如果你需要了解某个知识点,不管是Shift+F 搜索,还是按目录进行检索,都能用最快的速度找到你要的内容。

相对于我们平时看的碎片化内容,这份笔记的知识点更系统化,更容易理解和记忆,是严格按照整个知识体系编排的。

(一)架构师必备Java基础

1、深入理解Java泛型

2、注解深入浅出

3、并发编程

4、数据传输与序列化

5、Java虚拟机原理

6、高效IO

……

图片

(二)设计思想解读开源框架

1、热修复设计

2、插件化框架设计

3、组件化框架设计

4、图片加载框架

5、网络访问框架设计

6、RXJava响应式编程框架设计

……

图片

(三)360°全方位性能优化

1、设计思想与代码质量优化

2、程序性能优化

  • 启动速度与执行效率优化
  • 布局检测与优化
  • 内存优化
  • 耗电优化
  • 网络传输与数据储存优化
  • APK大小优化

3、开发效率优化

  • 分布式版本控制系统Git
  • 自动化构建系统Gradle

……

图片

(四)Android框架体系架构

1、高级UI晋升

2、Android内核组件

3、大型项目必备IPC

4、数据持久与序列化

5、Framework内核解析

……

图片

(五)NDK模块开发

1、NDK开发之C/C++入门

2、JNI模块开发

3、Linux编程

4、底层图片处理

5、音视频开发

6、机器学习

……

图片

(六)Flutter学习进阶

1、Flutter跨平台开发概述

2、Windows中Flutter开发环境搭建

3、编写你的第一个Flutter APP

4、Flutter Dart语言系统入门

……

图片

(七)微信小程序开发

1、小程序概述及入门

2、小程序UI开发

3、API操作

4、购物商场项目实战

……

图片

(八)kotlin从入门到精通

1、准备开始

2、基础

3、类和对象

4、函数和lambda表达式

5、其他

……

图片

好啦,这份资料就给大家介绍到这了,有需要详细文档的小伙伴,可以微信扫下方二维码领取哈~

img

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐