SavedState × Compose · AndroidX 源码指南
AAndroidX 源码指南
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 状态rememberSaveableCompose Runtime Saveable
在 ViewModel 中恢复状态SavedStateHandleLifecycle ViewModel SavedState
基础设施访问宿主 registryLocalSavedStateRegistryOwnerSavedState 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 节点的值可以使用:

相关页面