为什么需要理解生命周期?
Android 系统的资源管理机制会导致 Activity 在用户无感知的情况下被销毁和重建。如果不正确处理生命周期,轻则丢失用户数据,重则导致应用崩溃。
生命周期回调方法
Activity 类提供了六个核心回调方法:
- onCreate() — 系统创建 Activity 时调用。必须在此方法中执行初始化逻辑(如 setContentView),且只会调用一次。
- onStart() — Activity 即将对用户可见时调用。
- onResume() — Activity 开始与用户交互时调用。此时 Activity 位于栈顶。
- onPause() — 系统即将启动或恢复另一个 Activity 时调用。应在此释放 CPU 密集型资源。
- onStop() — Activity 对用户不再可见时调用。
- onDestroy() — Activity 被销毁前调用。这是最后一个回调。
常见场景的生命周期流转
启动 Activity:onCreate → onStart → onResume
按下 Home 键:onPause → onStop
从 Home 返回:onRestart → onStart → onResume
旋转屏幕:onPause → onStop → onDestroy → onCreate → onStart → onResume
启动另一个 Activity(覆盖但不完全遮挡):onPause(新 Activity 主题为透明或 Dialog)
onSaveInstanceState 的作用
当 Activity 可能被系统意外销毁时(如旋转屏幕),系统会调用 onSaveInstanceState() 方法。你应该在此方法中将需要保存的临时数据存入 Bundle,然后在 onCreate() 或 onRestoreInstanceState() 中恢复。
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putInt("scrollPosition", recyclerView.computeVerticalScrollOffset())
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
savedInstanceState?.getInt("scrollPosition")?.let {
recyclerView.scrollTo(0, it)
}
}
最佳实践
- onCreate 中只做必要的初始化,耗时操作放到后台线程。
- onPause 中释放独占资源(如相机、传感器)。
- onStop 中执行较重的清理工作(如保存数据到数据库)。
- 始终考虑”Android 可能随时杀死你的进程”这一点来设计应用。