[Android 从零到一] Activity 生命周期与启动模式
1. 背景
Activity 是 Android 四大组件之首,是用户交互的入口。理解它的生命周期和启动模式,是写好 Android 应用的基础。新手常遇到「退出应用数据丢了」「屏幕旋转崩溃」「启动多个相同页面」等问题,追根溯源都是对这块理解不到位。
2. Activity 生命周期
2.1 六种核心回调
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 初始化:布局、变量、ViewModel
}
override fun onStart() {
super.onStart()
// 界面可见,但还不可交互
}
override fun onResume() {
super.onResume()
// 获得焦点,可交互
}
override fun onPause() {
super.onPause()
// 失去焦点,不能做耗时操作(应尽快返回)
}
override fun onStop() {
super.onStop()
// 完全不可见,释放资源
}
override fun onRestart() {
super.onRestart()
// 从 Stop 回到 Start 前调用
}
override fun onDestroy() {
super.onDestroy()
// 销毁,清理
}
}
2.2 生命周期流程
完整的生命周期调用顺序:
用户打开 → onCreate → onStart → onResume → [运行中]
↓
[其他Activity覆盖]
↓
onPause → onStop → onRestart → onStart → onResume
↓ ↓
onDestroy [完全不可见]
2.3 常见场景
| 场景 | 回调序列 |
|---|---|
| 首次打开 | onCreate → onStart → onResume |
| 按返回键退出 | onPause → onStop → onDestroy |
| 屏幕旋转 | onPause → onStop → onDestroy → onCreate → onStart → onResume |
| 跳转新 Activity | onPause → onStop |
2.4 状态保存与恢复
// 保存临时状态
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("input_text", binding.etInput.text.toString())
}
// 恢复状态
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
binding.etInput.setText(savedInstanceState.getString("input_text", ""))
}
3. Activity 启动模式
通过 AndroidManifest.xml 的 launchMode 设置:
| 模式 | 行为 | 典型场景 |
|---|---|---|
| standard | 每次启动创建新实例 | 普通页面 |
| singleTop | 栈顶复用,不走 onCreate | 消息通知页 |
| singleTask | 栈中复用,上浮清栈 | 主页 |
| singleInstance | 独占任务栈 | 来电页 |
// 验证启动模式:打印 hashCode 看是否复用
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("ActivityDemo", "onCreate: ${hashCode()}")
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
Log.d("ActivityDemo", "onNewIntent 复用: ${hashCode()}")
}
4. 避坑指南
- 屏幕旋转崩溃:onSaveInstanceState 保存数据,或用 ViewModel 替代
- 全局变量泄漏:不要在 Activity 中持有静态变量引用自身
- singleTask + startActivityForResult:不兼容,用 Activity Result API 替代
- 后台启动限制:Android 10+ 严格限制,用 Notification 代替
5. 总结
- onCreate/onDestroy 配对、onStart/onStop 配对、onResume/onPause 配对
- 配置变更导致重建,用 ViewModel + onSaveInstanceState 保存数据
- 启动模式选错会导致返回栈混乱,按场景选

浙公网安备 33010602011771号