Android 生命周期备忘表-第一部分:单一 Activities

翻译自 The Android Lifecycle cheat sheet — part I: Single Activities

Android 旨在为用户提供支持,让他们以直观的方式使用 apps。 例如,一个 app 的用户可能会旋转屏幕,响应通知或切换到其他任务,他们应该能够在此类事件之后无缝地继续使用 app。

为了提供这种用户体验,您应该知道如何管理组件生命周期。组件可以是 Activity,Fragment,Service,Application 本身,甚至是底层进程。组件有一个生命周期,在这个生命周期中,它通过状态进行转换。每当发生转换时,系统都会通过生命周期回调方法通知您。

为了帮助我们解释生命周期是如何工作的,我们定义了一系列场景,这些场景根据存在的组件进行分组:

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

第二部分: 多个 activities — 导航和返回栈

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

第四部分: ViewModels, Translucent Activities 和 启动模式

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

注意:这些图表适用于 Android P / Jetpack 1.0行为。

除非另有说明,否则以下方案将展示组件的默认行为。

第一部分: Activities

单个 Activity — 场景 1: App 被 finished 并 restarted

由以下操作触发:

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

这个最简单的场景展示了当只有单个 activity 的应用程序被用户 started,finished 和 restarted 会发生什么:

场景 1: App 被 finished 和 restarted

管理状态

  • onSaveInstanceState 没有被调用 (因为 activity 被 finished 了, 所以你无需保存状态)
  • onCreate 重新打开 app 时没有 Bundle,因为 activity 已经 finished 了并且状态不需要被恢复。

单个 Activity — 场景 2: 用户导航离开

由以下操作触发:

  • 用户按下 Home 按钮
  • 用户切换到另一个 app (通过 Overview 菜单,通知,接听电话等)

场景 2: 用户导航离开

在这种情况下,系统将 stop 该 activity,但不会立即 finish 它。

管理状态

当您的 activity 进入Stopped 状态时,系统使用 onSaveInstanceState 来保存 app 状态,以防系统稍后杀死 app 的进程(见下文)。

假设进程未被终止,则 activity 实例将保留在内存中,保留所有状态。 当 activity 返回到前台时,activity 会调用此信息。您无需重新初始化先前创建的组件。


单个 Activity — 场景 3: 配置更改

由以下操作触发:

  • 配置更改,如旋转
  • 用户在多窗口模式下调整窗口大小

场景 3: 旋转和其他配置更改

管理状态

配置更改(如旋转或窗口大小调整)应允许用户准确地在停止的位置继续。

  • Activity 被完全 destroyed,但是状态已被保存下来并为新实例恢复了状态
  • onCreate 和 onRestoreInstanceState 中的 Bundle 是相同的。

单个 Activity — 场景 4: App 被系统 paused

由以下操作触发:

  • 启用多窗口模式(API 24+)并失去焦点
  • 另一个 app 部分遮盖了正在运行的 app(购买对话框,运行时权限对话框,第三方登录对话框...)
  • 出现了 intent 选择器,例如分享对话框

场景 4: App 被系统 paused

此场景不适用与:

  • 同一个 app 中的对话框。显示 AlertDialog 或 DialogFragment 不会 pause 下层的 activity。
  • 通知。用户收到新通知或下拉通知栏不会 pause 下层的 activity。

(在 P 上,onSaveInstanceState 是在 onStop 之后被调用的)。

猜你喜欢

转载自blog.csdn.net/qq_33404903/article/details/89527040
今日推荐