Android Activity 生命周期完全指南

为什么需要理解生命周期?

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 可能随时杀死你的进程”这一点来设计应用。
沪ICP备2026038898号-1