Jetpack Compose Academy · 课时

跨旋转使用 rememberSaveable

在配置变化期间保留状态。

第 4 / 4 课13 个步骤

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

旋转屏幕的问题

旋转屏幕后,点击计数器会突然回到零。这是因为配置变化会重新创建整个 Activity。

remember 还不够

remember 能跨越重组保存状态,但无法跨越 Activity 的重新创建。当 Activity 重启时,记住的状态就会永久消失。

什么会触发重新创建

旋转屏幕、切换语言和切换深色模式都属于配置变化。每次变化都会拆除并从头构建您的界面。

认识 rememberSaveable

rememberSaveable 的工作方式类似于 remember,但还会将值保存到已保存的实例状态中,因此能够在重新创建后保留。

var count by rememberSaveable { mutableStateOf(0) }

只需替换调用

通常只需改动一个词即可修复:将 remember 替换为 rememberSaveable,计数器就能在旋转屏幕后保留数值。

哪些内容可以保存

它开箱即用地保存适合放入 Bundle 的类型:Int、String、Boolean 以及其他基本类型。大多数简单状态都能直接使用。

var name by rememberSaveable { mutableStateOf("") }

自定义类型需要 Saver

对于您自己的类,请为 rememberSaveable 提供一个 Saver,告诉它如何将对象存储并恢复为适合放入 Bundle 的数据。

数据类也很简单

对于 Kotlin 数据类,您可以使用 mapSaver 或 listSaver 辅助工具,也可以使用 Parcelize 注解,让保存变得简单。

@Parcelize
data class User(val name: String) : Parcelable

它并非永久保存

rememberSaveable 能在旋转屏幕和短暂转入后台时保留状态,但不能在整个应用被终止后保留。要保存永久数据,您仍然需要存储。

什么时候该使用它

对于希望在旋转屏幕后保留的临时界面状态,请使用 rememberSaveable,例如计数器、已输入的查询或标签页索引。

remember 与 Saveable 的区别

经验法则是:对于开销很小或可以重新计算的值,使用 remember;如果旋转屏幕后丢失值会让用户感到不便,则使用 rememberSaveable。

快速检查

哪个 API 可以让状态在屏幕旋转后保留?

回顾

您已经学会了,rememberSaveable 可以让临时界面状态在旋转屏幕和配置变化期间保持,而 remember 不行。做得不错!🎉

免费开始

用 AI 导师学习 Kotlin — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
30
课程
120

常见问题解答

「跨旋转使用 rememberSaveable」课时是免费的吗?

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

「跨旋转使用 rememberSaveable」这节课中我会学到什么?

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

学习 Jetpack Compose Academy 需要有经验吗?

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

「跨旋转使用 rememberSaveable」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. remember 与 mutableStateOf
  2. 重新组合:什么会触发重绘
  3. 构建点击计数器
  4. 跨旋转使用 rememberSaveable
← 返回 Jetpack Compose Academy