SavedState
应用基础 · androidx.savedstate
SavedState × Compose1.6.0-alpha01
分清 savedstate-compose、rememberSaveable 和 SavedStateHandle 三个入口。
最后更新 2026-08-01
savedstate-compose 当前提供什么
当前 public API 很小:核心是 LocalSavedStateRegistryOwner。它让组合树中的库代码获取当前 registry owner,而不必把 Activity 或 Fragment 逐层传入。
@Composable
fun RegistryAwareContent() {
val owner = LocalSavedStateRegistryOwner.current
// 在需要直接接入 registry 的基础设施代码中使用 owner
}业务组件通常不需要直接读取 owner。
三种 API 不要混为一谈
| 需求 | API | 所属位置 |
|---|---|---|
| 保存一个 Composable 的小型 UI 状态 | rememberSaveable | Compose Runtime Saveable |
| 在 ViewModel 中恢复状态 | SavedStateHandle | Lifecycle ViewModel SavedState |
| 基础设施访问宿主 registry | LocalSavedStateRegistryOwner | SavedState Compose |
savedstate-compose 并没有因为名字相似就重新实现 rememberSaveable。依赖选择应跟着真正使用的 API 走。
什么时候用 rememberSaveable
短小、只属于该 UI 节点的值可以使用:
复制即用
var expanded by rememberSaveable { mutableStateOf(false) }当状态参与业务逻辑、需要被多个界面观察或由 ViewModel 持有时,把最小恢复字段放入 SavedStateHandle,再由 UI 收集。
常见陷阱
- 把网络状态塞 rememberSaveable:进程重建不保证,且 Bundle 容量有限。
- 大对象存 SavedStateHandle:Bitmap 等应走 ViewModel + 缓存。
- 误以为 savedstate-compose 是 rememberSaveable 的替代:两者服务不同场景。
要点
savedstate-compose当前提供什么:当前 public API 很小:核心是LocalSavedStateRegistryOwner。它让组合树中的库代码获取当前 registry owner,而不必把 Activity 或 Fragment 逐层传入。- 三种 API 不要混为一谈:| 需求 | API | 所属位置 |
| --- | --- | --- |
| 保存一个 Composable 的小型 UI 状态 |
rememberSaveable| Compose Runtime Saveable | | … - 什么时候用 rememberSaveable:短小、只属于该 UI 节点的值可以使用: