真实面经题目 · 原创解析

Android Activity 生命周期是什么?

Android Activity 生命周期描述一个界面组件从创建、可见、可交互、暂停、停止到销毁的状态变化。核心回调包括 onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart,实际开发还要理解配置变更、进程回收、状态保存和资源释放。

出现于:字节跳动 · 客户端

60 秒回答模板

可以按状态和回调顺序回答。Activity 第一次创建会走 onCreate,做一次性初始化、绑定布局和 ViewModel;随后 onStart 表示界面对用户可见,onResume 表示进入前台可交互。当前界面被部分遮挡时会走 onPause,此时应暂停动画、传感器、相机预览或提交轻量状态;完全不可见时走 onStop,可以释放更重资源、取消可见性相关任务;最终销毁时走 onDestroy。若从停止状态回到前台,会先走 onRestart,再 onStart、onResume。还要补充:横竖屏切换等配置变更可能销毁并重建 Activity,系统内存不足也可能回收进程,所以关键 UI 状态要用 onSaveInstanceState、ViewModel、持久化存储等方式保存。

考点 可见与可交互
难度 真实面经高频题
回答目标 讲清机制、边界和追问

深入解析

01

生命周期的核心状态

Activity 生命周期围绕可见性和交互性变化展开。Created 表示对象已创建但还不可见,Started 表示界面可见但不一定可交互,Resumed 表示位于前台并可接收用户输入,Paused 表示失去前台焦点但可能仍部分可见,Stopped 表示完全不可见,Destroyed 表示实例结束。理解状态比死记回调更重要,因为资源申请和释放要跟状态匹配。

02

首次启动流程

首次打开 Activity 通常依次执行 onCreate、onStart、onResume。onCreate 适合做一次性初始化,例如设置 content view、初始化依赖、绑定观察者和恢复状态;onStart 表示界面即将可见,适合注册和可见性相关的监听;onResume 表示界面可以交互,适合启动相机、传感器、动画、前台刷新等需要用户正在使用页面的任务。

03

离开页面流程

当另一个 Activity 覆盖当前界面或用户按 Home 键时,当前 Activity 会先进入 onPause。如果它随后完全不可见,会进入 onStop;如果只被半透明界面覆盖,可能停留在 Paused。onPause 必须快速返回,不能做耗时 I/O,否则会影响新界面启动。onStop 可以释放更重的可见性资源,但仍要注意后台限制和异步任务的生命周期绑定。

04

恢复与重建

从 Stopped 回到前台时会走 onRestart、onStart、onResume。横竖屏切换、语言变化、深色模式变化等配置变更默认会导致 Activity 销毁并重建,流程可能是 onPause、onStop、onDestroy,然后重新 onCreate。系统因内存压力杀死后台进程后,用户回到任务栈时也可能重建 Activity。开发者不能假设内存中的字段一直存在。

05

状态保存和资源管理

生命周期的工程价值在于把状态和资源放在正确位置。短暂 UI 状态可用 onSaveInstanceState 保存,跨配置变更的数据适合 ViewModel,必须长期存在的数据应写入数据库或持久化存储。资源释放要成对设计:注册监听就要取消注册,启动协程就要绑定 lifecycleScope 或明确取消,打开相机、定位、蓝牙等硬件资源要在合适回调中释放,避免泄漏和后台耗电。

易错点

  • 只背回调顺序,却说不清每个回调对应可见性、焦点和资源管理含义。
  • 在 onPause 中做耗时操作,导致页面切换卡顿甚至触发 ANR 风险。
  • 把关键业务状态只放在 Activity 字段里,配置变更或进程回收后状态丢失。
  • 依赖 onDestroy 做最后保存,忽略系统杀进程时该回调不一定执行。

面试官追问

onPause 和 onStop 的区别是什么?

onPause 表示失去前台焦点,界面可能仍部分可见;onStop 表示完全不可见。onPause 要快速,onStop 更适合释放较重的可见性资源。

横竖屏切换为什么会重新走生命周期?

横竖屏属于配置变更,Android 默认会销毁并重建 Activity,以便重新加载适配新配置的资源和布局。

onDestroy 一定会被调用吗?

不一定。正常 finish 或配置变更通常会调用,但进程被系统直接杀死时不保证回调执行。因此关键数据不能依赖 onDestroy 才保存。

ViewModel 和 onSaveInstanceState 怎么分工?

ViewModel 适合保存跨配置变更的界面数据和加载状态;onSaveInstanceState 适合保存少量可序列化 UI 状态,用于进程被杀后重建时恢复。