安卓Activity生命周期

Android Activity 生命周期完整总结(回调方法)

🧭 生命周期总览

Android 中的 Activity 生命周期可从三个层次来理解:

  1. 完整生命周期:从创建到销毁
  2. 可见生命周期:界面是否对用户可见
  3. 前台生命周期:是否允许与用户交互

🟩 1. 完整生命周期(Activity 的诞生与死亡)

回调方法 描述
onCreate() Activity 首次创建时调用。用于初始化界面、绑定视图等。
onDestroy() Activity 被销毁前调用。用于释放资源。系统有时直接 kill 进程不会调用该方法。

🟨 2. 可见生命周期(Activity 是否显示在用户眼前)

回调方法 描述
onStart() Activity 即将变为可见时调用。界面显示但尚不可交互。
onStop() Activity 完全不可见时调用(例如进入后台)。此时应释放 UI 相关资源。

🟥 3. 前台生命周期(Activity 是否可与用户交互)

回调方法 描述
onResume() Activity 进入前台并可以与用户交互。此时拥有焦点、接收输入。
onPause() Activity 正在失去焦点(可能被新 Activity 遮挡或进入后台)。此时应暂停动画、保存状态等。

🔄 4. 其他辅助回调

回调方法 描述
onRestart() 当 Activity 从 onStop() 状态重新进入前台前调用。适合用于恢复状态或刷新数据。

📊 生命周期流程图

首次启动:

onCreate() → onStart() → onResume()
(Activity 正常运行中)
→ onPause() → onStop() → onDestroy()

按下 Home 键返回桌面再回应用:

onPause() → onStop()
→ onRestart() → onStart() → onResume()

切换到其他 Activity:

A: onPause()
B: onCreate() → onStart() → onResume()
A(可选): onStop()

🧠 实用开发建议

方法 推荐用途
onCreate() 初始化界面,绑定数据,设置监听器
onStart() 注册 BroadcastReceiver,启动轻量资源
onResume() 启动摄像头、动画、位置监听等交互功能
onPause() 保存状态、暂停动画、释放临时资源
onStop() 释放大型资源(网络、Bitmap、后台任务等)
onDestroy() 清理资源,防止内存泄漏
onRestart() 用于从后台返回时刷新界面或重启任务

✅ 快速记忆口诀

创建时:onCreate
可见时:onStart
可交互:onResume
离前台:onPause
不可见:onStop
被销毁:onDestroy
回前台:onRestart

📦 Jetpack Compose 特别说明

在 Jetpack Compose 中,虽然 Activity 生命周期仍然存在,但 UI 逻辑大多迁移到 @ComposableViewModel 中,建议配合以下 API:

  • LaunchedEffect:用于触发协程副作用
  • remember:用于状态保存
  • DisposableEffect:用于感知组件进入/离开 Composition
  • ViewModel + LifecycleObserver:用于生命周期感知逻辑抽离

✨ 示例:打印所有生命周期日志

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 : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("Life", "onCreate()")
}

override fun onStart() {
super.onStart()
Log.d("Life", "onStart()")
}

override fun onResume() {
super.onResume()
Log.d("Life", "onResume()")
}

override fun onPause() {
super.onPause()
Log.d("Life", "onPause()")
}

override fun onStop() {
super.onStop()
Log.d("Life", "onStop()")
}

override fun onDestroy() {
super.onDestroy()
Log.d("Life", "onDestroy()")
}

override fun onRestart() {
super.onRestart()
Log.d("Life", "onRestart()")
}
}
  • Copyrights © 2023-2025 Hexo

请我喝杯咖啡吧~

支付宝
微信