介绍:
remember
和 rememberSaveable
都是 Jetpack Compose 中重要的状态管理功能。了解何时使用它们可以帮助我们构建更高效的 UI。本文将比较 Jetpack Compose 中的两个状态管理功能:remember
和 rememberSaveable
。
remember
是一个允许我们在组合中存储值的函数。每当使用它的组件被重组时,该值就会被重组。它在存储一个与组件生命周期无关的值时很有用。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
会在组合重建时会保存和恢复。
总结:
- 使用
remember
缓存可组合项中需要执行复杂操作或计算得到的变量,这样只在初始组合时执行避免每次重组都执行。 - 使用
rememberSaveable
记住即使页面重建也需要保留的数据,比如:用户输入,避免配置修改 Activity 重建后用户的输入丢失。