视图是否在Android中同时渲染



我写了一个这样的组合函数:

ScrollableColumn {
for (x in 0..10000) {
ClickCounter(viewModel)
}
}
var num = 0
@Composable
fun ClickCounter(viewModel: MyViewModel) {
Log.e("TAG", "Composing $num-th btn")
num++
val count: Int by viewModel.count.observeAsState(0)
Button(onClick = {
viewModel.count.value = viewModel.count.value?.plus(1)
}) {
Text("I've been clicked $count times")
}
}

在这种情况下,日志显示按钮是按顺序呈现的,因为for循环是按顺序执行的,我想是否有一些组合函数同时呈现的情况?那是不是相对于android中的View是线程不安全的呢?

是的,可组合文件是按顺序呈现的,并且它们是完全线程安全的。事实上,JetPack compose是单线程的,因此原子性是有保证的。每当状态变量被修改时,代码块在重新组合发生之前完全执行到完成

最新更新