先把结论放在前面:状态保存与恢复的核心不是"存进去",而是"判断什么该存、什么不该存、存的下限在哪"。Activity 状态保存走 onSaveInstanceState 拿到的 Bundle,有约 1MB 的事务上限,任何大对象进去都会在提交时抛 TransactionTooLargeException。这一关立住了,后面全是取舍。
这篇面试里聊到状态保存与恢复,最怕只背结论。要答好,得先知道常见的错误长什么样,再反向把正确姿势讲清。
先讲清三个状态的层次
Android 里的"状态"不是一个东西,至少分三层,混在一起是大部分错误答案的源头。
| 层次 | 载体 | 生命周期 | 典型内容 |
|---|---|---|---|
| 视图自身状态 | View 的 onSaveInstanceState | 视图树重建前后 | TextView 的文本、EditText 的选区、RecyclerView 的滚动位置 |
| 界面状态 | Activity.onSaveInstanceS |