0Pricing
Android Academy · 课时

rememberSaveable

在配置变化期间保留状态

rememberSaveable 是 CoddyKit 上的免费 Android Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Android Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Android Academy 课程共包含 4 节课。

remember 的问题

remember 可以在重新组合期间保留状态,但无法应对屏幕旋转等配置变化。活动重新创建时,记住的状态会丢失并重置为初始值。

使用 rememberSaveable

rememberSaveable 的工作方式与 remember 类似,但还会保存配置变化和进程终止期间的值,并在之后恢复该值。

var count by rememberSaveable { mutableStateOf(0) }

旋转示例

使用普通 remember 时,旋转手机会将计数器重置为 0。使用 rememberSaveable 时,计数值会在旋转过程中保留。

它如何保存状态

在后台,rememberSaveable 会将值存储在活动的已保存实例状态 Bundle 中,这与旧版 View 系统用于 onSaveInstanceState 的机制相同。

支持的类型

它会自动保存适合放入 Bundle 的类型:基本类型、String 和 Parcelable 对象。自定义类型需要额外处理。

进程终止

如果 Android 为释放内存而在后台终止您的应用,之后用户重新打开应用时,rememberSaveable 会恢复已保存的状态,使屏幕看起来与用户离开时一致。

自定义保存器

对于无法自动保存的类型,请提供一个保存器,将其转换为可保存的形式,并能从该形式还原。Compose 提供了 listSaver 和 mapSaver 等辅助工具。

val saver = listSaver<MyState, Any>(
    save = { listOf(it.a, it.b) },
    restore = { MyState(it[0] as Int, it[1] as String) }
)

使用自定义保存器

通过 saver 参数将保存器传递给 rememberSaveable,这样 Compose 就知道如何持久化您的类型。

var state by rememberSaveable(stateSaver = saver) {
    mutableStateOf(MyState(0, ""))
}

如何选择

对于用户在旋转屏幕后丢失会感到不便的状态,请使用 rememberSaveable,例如表单输入、滚动位置和选中的标签页。对于重置也无妨的临时界面状态,请使用普通的 remember。

不适合存储大量数据

已保存的 Bundle 容量很小。请不要将大量数据(位图、长列表)存储在 rememberSaveable 中。请将大量数据保存在 ViewModel 或存储库中,只保存少量标识符。

整合应用

借助 rememberSaveable,表单字段在旋转屏幕后仍能保留。

@Composable
fun LoginField() {
    var email by rememberSaveable { mutableStateOf("") }
    TextField(
        value = email,
        onValueChange = { email = it }
    )
}

快速检查

rememberSaveable 能做到而 remember 做不到的事情是什么?

回顾

rememberSaveable:

  • 不仅能在重新组合后保留状态,还能在旋转屏幕和进程终止后保留状态。
  • 会自动保存基本类型、String 和 Parcelable。
  • 对于自定义类型,请使用 保存器。
  • 请让保存的数据保持较小;较大的数据应放在 ViewModel 中。

常见问题解答

「rememberSaveable」课时是免费的吗?

是的 — 「rememberSaveable」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Android Academy 课程的其余内容,请升级到 CoddyKit PRO。 Android Academy 课程共包含 4 节课。

「rememberSaveable」这节课中我会学到什么?

在配置变化期间保留状态 你通过在浏览器中直接运行的动手代码来练习 Android Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Android Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Android Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「rememberSaveable」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Android Academy 课中编写并运行代码吗?

能。每节 Android Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 remember 和 mutableStateOf 管理状态
  2. 重组详解
  3. 状态提升
  4. rememberSaveable
← 返回 Android Academy