ITmob-Ly
发布于 2023-04-11 / 269 阅读
0

Jetpack Compose 中 remember 和 rememberSaveable 的介绍和对比

介绍:

rememberrememberSaveable 都是 Jetpack Compose 中重要的状态管理功能。了解何时使用它们可以帮助我们构建更高效的 UI。本文将比较 Jetpack Compose 中的两个状态管理功能:rememberrememberSaveable

  1. remember 是一个允许我们在组合中存储值的函数。每当使用它的组件被重组时,该值就会被重组。它在存储一个与组件生命周期无关的值时很有用。
  2. rememberSaveable 也是一个允许我们在组合中存储值的函数,但它会将值保存到组件的已保存状态中。这意味着当由于配置更改等原因在重新创建 activity 或进程后(如旋转)而重新创建组件时,该值将被恢复。

所以当不需要跨配置更改保存值时使用 remember ,在需要跨配置更改保存值时使用rememberSaveable

例子:

@Composable
fun CounterScreen() {
    var counter by remember { mutableStateOf(0) }
    var saveableCounter by rememberSaveable { mutableStateOf(0) }
    Button(onClick = { counter++ }) {
        Text("Counter: $counter" )
    }
    Button(onClick = { saveableCounter++ }) {
        Text("Saveable Counter:$saveableCounter" )
    }
}

在此示例中,counter 变量因为使用 remember 所以不会在组合重建时保存;saveableCounter 变量使用的是 rememberSaveable 会在组合重建时会保存和恢复。

总结:

  1. 使用 remember 缓存可组合项中需要执行复杂操作或计算得到的变量,这样只在初始组合时执行避免每次重组都执行。
  2. 使用 rememberSaveable 记住即使页面重建也需要保留的数据,比如:用户输入,避免配置修改 Activity 重建后用户的输入丢失。