Activity 笔记修订说明
这版笔记是在原 PDF 内容基础上重新整理,并根据 Android 官方文档补充了版本差异和纠错说明。
本次主要修订点
| 原 PDF / 旧笔记说法 | 修订后说法 |
|---|---|
| Activity 是“与用户交互的接口” | Activity 是 Android 四大组件之一,是用户交互入口和 UI 宿主窗口;不要理解成 Java interface |
onSaveInstanceState() 总在 onStop() 之前 |
这是旧版本行为。target API 28+ 时,onSaveInstanceState() 在 onStop() 之后调用 |
onResume() 等价于获取焦点 |
普通全屏场景基本成立;Android 10+ 多窗口 / multi-resume 下不一定成立 |
| 配置 `orientation | screenSize` 后“什么也没有调用” |
启动 Service 示例使用 startActivity(intent) |
这是错误代码,应该使用 startService(intent) |
FLAG_ACTIVITY_NEW_TASK 等价于 singleTask |
不等价。它影响任务栈选择,但不是 manifest 中的 singleTask 启动模式 |
onDestroy() 可以作为可靠清理时机 |
不可靠。进程被系统杀死时不能依赖 onDestroy() 保存关键数据 |
版本差异总览
| 主题 | 版本差异 |
|---|---|
onSaveInstanceState() 顺序 |
API 28 之前一般在 onStop() 前;target API 28+ 时在 onStop() 后 |
| 多窗口生命周期 | Android 7.0 引入多窗口;Android 10/API 29 引入 multi-resume,多个 Activity 可同时处于 Resumed |
| 横竖屏配置 | target API 13+ 后,横竖屏变化通常不仅是 orientation,还涉及 screenSize,必要时还要考虑 screenLayout |
| Service 后台限制 | Android 8.0/API 26 起,后台启动和长期运行 Service 受到更多限制,长任务要考虑前台服务或 WorkManager |
| Deep Link / App Links | Scheme 能跳转 App 内页;但生产环境中,外部 Web 链接更推荐使用 Android App Links |
建议学习方式
不要把生命周期机械背成固定流程,而要抓住三个核心判断:
onPause:焦点 / 前台交互状态变化
onStop:可见性变化
onDestroy:对象销毁,但不保证一定回调
启动模式也不要只背定义,要结合任务栈画图理解:
standard:每次新建
singleTop:栈顶复用
singleTask:栈内复用并清理上方页面
singleInstance:独占任务栈
参考来源
- 原始 PDF:《01、Activity知识总结.pdf》
- Android 官方文档:Activity 生命周期
https://developer.android.com/guide/components/activities/activity-lifecycle - Android 官方文档:Activity API Reference
https://developer.android.com/reference/android/app/Activity - Android 官方文档:处理配置变更
https://developer.android.com/guide/topics/resources/runtime-changes - Android 官方文档:
<activity>manifest 配置
https://developer.android.com/guide/topics/manifest/activity-element - Android 官方文档:Tasks and back stack
https://developer.android.com/guide/components/activities/tasks-and-back-stack - Android 官方文档:Services overview
https://developer.android.com/develop/background-work/services
评论