activity的生命周期
理解 Activity 从创建到销毁的完整生命周期——六个回调函数的调用时机和常见使用场景。
学习目标
- 能沿“activity的生命周期”的用户事件解释Android组件、状态所有者、线程与销毁边界。
- 能围绕“理解 Activity 从创建到销毁的完整生命周期——六个回调函数的调用时机和常见使用场景。”改出一个可运行结果,并用前后状态而非组件数量验收。
- 能在旋转、进程重建、拒权、离线或无效输入中选择适用反例,定位首个状态分叉。
- 能用实例ID、回调轨迹、旋转与进程恢复后的状态断言独立重放结论,并标明第四版机制与现代targetSdk政策的边界。
你的 Activity 是「活的」——它有生命周期
用户切到别的 App、旋转屏幕、按 Back 键——这些操作都会触发 ↡系统按固定顺序调用的六个回调方法,通知 Activity 当前处于创建、可见、前台、暂停、停止或销毁状态。。不懂生命周期,就容易内存泄漏、丢状态、莫名其妙崩溃。
用相机类比:onCreate 是开机,onResume 是进入拍摄,onPause 是接电话暂时放下,onStop 是盖上镜头盖,onDestroy 是关机。
六大生命周期回调
| 回调 | 调用时机 | 典型用途 |
|---|---|---|
onCreate() | Activity 首次创建 | 加载布局、初始化变量 |
onStart() | Activity 即将可见 | 注册可见时才需要的监听 |
onResume() | 前台可交互 | 开启动画、恢复相机预览 |
onPause() | 失去焦点 | 暂停动画、保存轻量状态 |
onStop() | 完全不可见 | 释放重资源 |
onDestroy() | Activity 被销毁 | 最终清理 |
第 1 / 6 步 · onCreate():Activity 首次创建,加载布局、初始化变量
点击播放,看系统依次调用六个回调;可暂停、单步、拖进度逐帧观察。
① A.onPause()
A 失去交互焦点,但仍可能部分可见(若 B 不是全屏)。此时应该暂停动画、保存轻量状态——onPause 是系统在低内存时最后保证执行的回调,持久化关键数据应在此完成。
① onPause → onStop → onDestroy
系统检测到屏幕方向变化,旧 Activity 实例依次经历暂停、停止、销毁三个回调。原有成员变量(如 EditText 输入、Activity 级状态)全部清空。
// 旋转前用户输入了 "Hello",onDestroy 后 mEditText 不复存在
实例被重建——成员变量默认清空,必须靠 ViewModel 或 onSaveInstanceState 保状态(下一章详讲)。
小结
- 六回调:Create → Start → Resume ↔ Pause/Stop → Destroy
- 启动第二个 Activity:先 Pause 当前,再 Create 新的,最后 Stop 旧的
- 旋转 = 销毁 + 重建,需状态保持机制
- 耗时操作勿放主线程生命周期回调
练习
问题 1:“第3章 The Activity Lifecycle”覆盖哪些正式节点和项目主线?
问题 2:怎样建立本页最小可执行实验?
问题 3:为什么只在正常点击路径运行不能证明完成?
问题 4:怎样设计能推翻当前实现的反例?
问题 5:从第4版语境迁移到现代目标SDK时如何控制变量?
问题 6:本页达到独立交接标准需要什么?
名词解释
本章出现的专业名词,用大白话再讲一遍。
- Activity 生命周期
Activity 从创建到销毁经历的回调序列。App 在对应回调里做初始化与资源释放。
- 配置变更
屏幕旋转、语言切换等导致 Activity 重建的系统事件。默认会走 onDestroy + onCreate。
“activity的生命周期”不使用未获授权的纸书正文;InformIT出版信息与授权电子版完整目录只用于确认第四版32章、269个正式目录节点和时代语境,第四版官方勘误用于识别工具链变更。下列中文解释、图示、交互、代码与练习均为独立教学重写,平台行为再以Android Developers的一手文档复核。
为什么“activity的生命周期”必须回到可观察状态
“activity的生命周期”的学习结果不是记住类名,而是能预测“理解 Activity 从创建到销毁的完整生命周期——六个回调函数的调用时机和常见使用场景。”在一次输入、一次重建和一次失败中的不同状态,并指出哪条Android合同产生差异。
第四版机制逐项深读
3. The Activity Lifecycle
在“activity的生命周期”中,“3. The Activity Lifecycle”在多窗口下不能用“可见”等同“可交互”;资源启停应服从实际生命周期状态与所有者。
Rotating GeoQuiz
在“activity的生命周期”中,“Rotating GeoQuiz”由系统驱动Activity在created、started、resumed等状态间迁移;日志必须同时记录实例ID和回调次序,才能区分返回与重建。
Activity States and Lifecycle Callbacks
在“activity的生命周期”中,“Activity States and Lifecycle Callbacks”由系统驱动Activity在created、started、resumed等状态间迁移;日志必须同时记录实例ID和回调次序,才能区分返回与重建。
Logging the Activity Lifecycle
在“activity的生命周期”中,分析“Logging the Activity Lifecycle”要把用户动作映射到onPause/onStop/onDestroy与新实例创建,onDestroy并不是持久化成功的承诺。
Exploring How the Activity Lifecycle Responds to User Actions
在“activity的生命周期”中,分析“Exploring How the Activity Lifecycle Responds to User Actions”要把用户动作映射到onPause/onStop/onDestroy与新实例创建,onDestroy并不是持久化成功的承诺。
Device Configuration Changes and the Activity Lifecycle
在“activity的生命周期”中,验证“Device Configuration Changes and the Activity Lifecycle”依次执行覆盖、返回、旋转与进程回收,比较旧实例、新实例和用户可见状态。
For the More Curious: UI Updates and Multi-Window Mode
在“activity的生命周期”中,“For the More Curious: UI Updates and Multi-Window Mode”在多窗口下不能用“可见”等同“可交互”;资源启停应服从实际生命周期状态与所有者。
For the More Curious: Log Levels
在“activity的生命周期”中,“For the More Curious: Log Levels”从症状回溯首个异常帧、日志事件或状态分叉;修复证据必须包含可复现输入和失败前后的同一断言。
Challenge: Preventing Repeat Answers
在“activity的生命周期”中,“Challenge: Preventing Repeat Answers”要求把临时UI状态、配置期状态与进程死亡后需恢复的最小事实分层;ViewModel跨配置但不跨进程,saved state必须小且可序列化。
Challenge: Graded Quiz
在“activity的生命周期”中,“Challenge: Graded Quiz”要求把临时UI状态、配置期状态与进程死亡后需恢复的最小事实分层;ViewModel跨配置但不跨进程,saved state必须小且可序列化。
“activity的生命周期”验收回顾
“activity的生命周期”只有在实例ID、回调轨迹、旋转与进程恢复后的状态断言能够从相同基线再次得到相同断言时才通过;第四版机制与现代平台政策分别记录,不用新API名称掩盖旧行为。