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:独占任务栈

参考来源