视图是否在 Android 中同时呈现?

Does view is rendered concurrently in 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 循环是顺序执行的,我猜是否有一些情况下组合函数是同时呈现的?那是相对于 View 在 android 不是线程安全的吗?

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