@Stable
是一个注释,它会告诉编译器它的值不会改变并返回完全相同的值。这应该只适用于始终静态的函数或值。
使用这个的主要原因很简单:
@Stable
注释表示某个值将始终通知 Composition(也称为触发新的重组)如果它发生变化。
任何不可变的东西,包括基元,因此都是“稳定的”,因为它们永远不会改变——这意味着它们根本不必关心通知组合。
例如,该数据类可以标记为稳定,因为它是不可变的。
@Stable
data class Movie(val id: Int, val name: String)
这意味着可以跳过以电影作为输入的可组合项。例如,在下面的可组合项中,当
MovieOverview
更改时,可以跳过 liked
。这可以提高性能,因为需要完成的工作更少。
@Composable
fun MovieCard(movie: Movie) {
val liked = remember { mutableStateOf(false) }
Column {
MovieOverview(movie)
Checkbox(
checked = liked.value,
onCheckedChange = { isChecked -> liked.value = isChecked }
)
}
}
}
但是,这也意味着可变项可以是稳定的,只要它们在更改时通知组合即可。
MutableState
就是最好的例子。它被标记为稳定,但也是可变的。每当你改变状态值时,就会触发重组。
https://developer.android.com/reference/kotlin/androidx/compose/runtime/MutableState https://developer.android.com/jetpack/compose/lifecycle#skipping