Android Activity 生命周期详解

前言

Android Activity 是 Android 应用开发中最核心的组件之一。

每个 Activity 都有其生命周期,从创建到销毁会经历多个状态。

理解 Activity 生命周期对于开发高质量的 Android 应用至关重要,特别是在处理配置变更、保存状态、后台任务等方面。

本文将详细介绍 Activity 的生命周期回调方法,以及各状态之间的对应关系。

Activity 生命周期概述

Activity 的生命周期由一系列回调方法组成,这些方法会在 Activity 进入不同状态时被系统调用。

理解这些回调方法的执行时机,可以帮助开发者正确管理资源、保存数据和提供良好的用户体验。

完整的生命周期图

Activity 的生命周期主要包括以下状态:创建、启动、恢复、暂停、停止、销毁。

这些状态之间的转换会触发相应的回调方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Activity 第一次创建时调用
}

override fun onStart() {
super.onStart()
// Activity 即将可见时调用
}

override fun onResume() {
super.onResume()
// Activity 即将与用户交互时调用
}

override fun onPause() {
super.onPause()
// Activity 失去焦点时调用
}

override fun onStop() {
super.onStop()
// Activity 对用户不可见时调用
}

override fun onDestroy() {
super.onDestroy()
// Activity 即将销毁时调用
}

override fun onRestart() {
super.onRestart()
// Activity 从停止状态重新启动时调用
}
}

生命周期回调方法详解

onCreate 与 onDestroy

onCreate 是 Activity 生命周期中第一个被调用的方法。

在这个方法中,通常进行初始化操作,如设置布局、初始化变量、绑定数据等。

当 Activity 被销毁时,会调用 onDestroy 方法,这是 Activity 生命周期的终点。

在 onDestroy 中,应该进行资源释放、取消网络请求、关闭数据库连接等清理工作。

这两个方法是一对,分别代表 Activity 的创建和销毁。

onStart 与 onStop

onStart 方法在 Activity 即将变得对用户可见时调用。

此时 Activity 已经在前台,但还没有获得焦点,还不能与用户交互。

当 Activity 对用户不再可见时,会调用 onStop 方法。

这可能是因为 Activity 被新的 Activity 覆盖,或者 Activity 退出了前台。

onStart 和 onStop 这一对回调方法,主要用于管理 Activity 的可见性资源。

在 onStart 中可以启动一些需要在界面可见时运行的服务,在 onStop 中应该暂停或停止这些服务。

onResume 与 onPause

onResume 方法在 Activity 即将开始与用户交互时调用。

此时 Activity 获得了焦点,可以响应用户的操作。

当 Activity 失去焦点时,会调用 onPause 方法。

例如,当用户打开另一个 Activity,或者收到来电时,当前 Activity 会进入暂停状态。

在 onPause 中,通常暂停动画、暂停视频播放、释放相机资源等。

在 onResume 中,恢复在 onPause 中暂停的操作。

这一对回调方法专注于 Activity 的交互状态管理。

生命周期状态对应关系

Android Activity 的生命周期可以归纳为三对主要的状态转换。

完整生命周期对

创建与销毁:onCreate 与 onDestroy

onCreate 是 Activity 生命周期的起点,在此处进行初始化设置。

onDestroy 是生命周期的终点,进行最终的清理工作。

从 onCreate 到 onDestroy,代表了 Activity 的整个存在周期。

有些 Activity 可能会在应用中多次创建和销毁,例如屏幕旋转、配置变更时。

可见与不可见:onStart 与 onStop

onStart 和 onStop 这一对回调反映了 Activity 对用户的可见性。

当 Activity 变得可见时调用 onStart,变不可见时调用 onStop。

在 onStart 中可以启动后台服务,在 onStop 中应该停止这些服务以节省资源。

这个周期可能会多次发生,例如用户打开新 Activity 又返回,或者切换到其他应用又回来。

可交互与不可交互:onResume 与 onPause

onResume 和 onPause 这一对回调反映了 Activity 是否获得焦点。

只有获得焦点的 Activity 才能与用户进行交互。

在 onResume 中可以恢复动画、视频播放,或者获取相机等资源的控制权。

在 onPause 中应该暂停这些操作,释放这些资源以便其他 Activity 使用。

生命周期回调调用顺序

一个典型的 Activity 启动和关闭的生命周期回调顺序如下。

启动时:首先调用 onCreate 进行初始化,然后调用 onStart 使 Activity 可见,最后调用 onResume 获得焦点开始交互。

关闭时:首先调用 onPause 失去焦点,然后调用 onStop 变得不可见,最后调用 onDestroy 销毁 Activity。

如果用户从 Activity A 启动 Activity B 的流程如下:Activity A 调用 onPause,然后 Activity B 调用 onResume,接着 Activity A 调用 onStop。

当用户从 Activity B 返回 Activity A 时:Activity B 调用 onPause,然后 Activity A 调用 onRestart(如果之前被停止)、onStart、onResume,最后 Activity B 调用 onStop 和 onDestroy。

配置变更与生命周期

当配置发生变更(如屏幕旋转、语言切换)时,Activity 会被销毁并重新创建。
系统会先调用 onSaveInstanceState 保存状态,然后调用 onDestroy,之后重新创建 Activity 并调用 onRestoreInstanceState 恢复状态。

1
2
3
4
5
6
7
8
9
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("key", "value")
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
val value = savedInstanceState.getString("key")
}

总结

Android Activity 的生命周期包含三对核心的回调方法。

onCreate 和 onDestroy 管理 Activity 的创建和销毁,是完整的生命周期。

onStart 和 onStop 管理 Activity 的可见性,是可见生命周期。

onResume 和 onPause 管理 Activity 的焦点状态,是前台生命周期。

理解这些生命周期回调的调用时机和对应关系,可以帮助开发者正确管理资源、保证数据的正确保存、提供流畅的用户体验。

在实际开发中,应该根据业务需求在适当的回调方法中执行相应的操作,避免在主线程执行耗时操作,及时释放不需要的资源。