视图是否在 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 是单线程的,所以原子性是有保证的。每当修改状态变量时,代码块在重组发生之前完全执行到完成
我写了一个这样的组合函数:
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 是单线程的,所以原子性是有保证的。每当修改状态变量时,代码块在重组发生之前完全执行到完成