[英]Jetpack compose when to create a new lambda instance in Composable?
请看我的代码:
@Composable
fun RecomposeLambdaTest() {
var state by remember {
mutableStateOf("1")
}
val stateHolder = remember {
StateHolder()
}
Column {
Button(onClick = {
state += "1"
}) {
Text(text = "change the state")
}
OuterComposable(state = state) {
stateHolder// just a reference to the instance outer the scope
}
}
}
@Composable
fun OuterComposable(state: String, onClick: () -> Unit) {
LogUtil.d("lambda hashcode: ${onClick.hashCode()}")
Column {
Text(text = state)
Button(onClick = onClick) {
Log.d("Jeck", "compose 2")
Text(text = "Text")
}
}
}
//@Stable
class StateHolder{
private var b = 2
}
每次我点击按钮, OuterComposable recompose,并记录 lambda hashcode——总是不同的,这意味着每次 recompose 时都会创建一个新的 lambda 实例
我取消注释 StateHolder 中的代码并使其看起来像:
@Stable
class StateHolder{
private var b = 2
}
每次我点击按钮, OuterComposable重新组合,并记录 lambda 哈希码——总是相同的,这意味着当重新组合时,Composer 重用 lambda
那么引擎盖下是什么?
编辑:好的,让它更容易,让我们像这样更改代码:
val stateHolder = remember {
2
}
结果是 lambda 被重用。 将 val 转换为 var,每次重组时都会创建 lambda。
所以我想我知道:如果 lambda 引用一个有价值的外部 scope 并且有价值的不稳定,每次都重新创建 lambda。
所以问题是:
一位作者遇到了同样的问题,这里是他的文章—— 6 Jetpack Compose Guidelines to Optimize Your App Performance
他说,私有财产仍然影响稳定,这似乎是谷歌团队的选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.