真实面经题目 · 原创解析
Android Activity 生命周期是什么?
Android Activity 生命周期描述一个界面组件从创建、可见、可交互、暂停、停止到销毁的状态变化。核心回调包括 onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart,实际开发还要理解配置变更、进程回收、状态保存和资源释放。
真实面经题目 · 原创解析
Android Activity 生命周期描述一个界面组件从创建、可见、可交互、暂停、停止到销毁的状态变化。核心回调包括 onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart,实际开发还要理解配置变更、进程回收、状态保存和资源释放。
可以按状态和回调顺序回答。Activity 第一次创建会走 onCreate,做一次性初始化、绑定布局和 ViewModel;随后 onStart 表示界面对用户可见,onResume 表示进入前台可交互。当前界面被部分遮挡时会走 onPause,此时应暂停动画、传感器、相机预览或提交轻量状态;完全不可见时走 onStop,可以释放更重资源、取消可见性相关任务;最终销毁时走 onDestroy。若从停止状态回到前台,会先走 onRestart,再 onStart、onResume。还要补充:横竖屏切换等配置变更可能销毁并重建 Activity,系统内存不足也可能回收进程,所以关键 UI 状态要用 onSaveInstanceState、ViewModel、持久化存储等方式保存。
Activity 生命周期围绕可见性和交互性变化展开。Created 表示对象已创建但还不可见,Started 表示界面可见但不一定可交互,Resumed 表示位于前台并可接收用户输入,Paused 表示失去前台焦点但可能仍部分可见,Stopped 表示完全不可见,Destroyed 表示实例结束。理解状态比死记回调更重要,因为资源申请和释放要跟状态匹配。
首次打开 Activity 通常依次执行 onCreate、onStart、onResume。onCreate 适合做一次性初始化,例如设置 content view、初始化依赖、绑定观察者和恢复状态;onStart 表示界面即将可见,适合注册和可见性相关的监听;onResume 表示界面可以交互,适合启动相机、传感器、动画、前台刷新等需要用户正在使用页面的任务。
当另一个 Activity 覆盖当前界面或用户按 Home 键时,当前 Activity 会先进入 onPause。如果它随后完全不可见,会进入 onStop;如果只被半透明界面覆盖,可能停留在 Paused。onPause 必须快速返回,不能做耗时 I/O,否则会影响新界面启动。onStop 可以释放更重的可见性资源,但仍要注意后台限制和异步任务的生命周期绑定。
从 Stopped 回到前台时会走 onRestart、onStart、onResume。横竖屏切换、语言变化、深色模式变化等配置变更默认会导致 Activity 销毁并重建,流程可能是 onPause、onStop、onDestroy,然后重新 onCreate。系统因内存压力杀死后台进程后,用户回到任务栈时也可能重建 Activity。开发者不能假设内存中的字段一直存在。
生命周期的工程价值在于把状态和资源放在正确位置。短暂 UI 状态可用 onSaveInstanceState 保存,跨配置变更的数据适合 ViewModel,必须长期存在的数据应写入数据库或持久化存储。资源释放要成对设计:注册监听就要取消注册,启动协程就要绑定 lifecycleScope 或明确取消,打开相机、定位、蓝牙等硬件资源要在合适回调中释放,避免泄漏和后台耗电。
onPause 表示失去前台焦点,界面可能仍部分可见;onStop 表示完全不可见。onPause 要快速,onStop 更适合释放较重的可见性资源。
横竖屏属于配置变更,Android 默认会销毁并重建 Activity,以便重新加载适配新配置的资源和布局。
不一定。正常 finish 或配置变更通常会调用,但进程被系统直接杀死时不保证回调执行。因此关键数据不能依赖 onDestroy 才保存。
ViewModel 适合保存跨配置变更的界面数据和加载状态;onSaveInstanceState 适合保存少量可序列化 UI 状态,用于进程被杀后重建时恢复。