【发布时间】:2021-10-06 09:26:49
【问题描述】:
代码 A 基于 article。
有人告诉我,如果函数写入局部变量,这段代码将不是线程安全的或不正确的,我会得到错误的结果。
1:我用 Code A 测试它,但我总是得到正确的结果,为什么?
2:代码 B 是否正确?
代码 A
@Composable
fun ListWithBug(myList: List<String>) {
var items = 0
Row(horizontalArrangement = Arrangement.SpaceBetween) {
Column {
for (item in myList) {
Text("Item: $item")
items++ // Avoid! Side-effect of the column recomposing.
}
}
Text("Count: $items")
}
}
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApp {
ListWithBug(mutableListOf("a","b","c","d","e","f","g","h","k","j"))
}
}
}
}
代码 B
@Composable
fun ListWithBug(myList: List<String>) {
var items by remember { mutableStateOf(0) }
Row(horizontalArrangement = Arrangement.SpaceBetween) {
Column {
for (item in myList) {
Text("Item: $item")
items++ // Avoid! Side-effect of the column recomposing.
}
}
Text("Count: $items")
}
}
【问题讨论】:
-
请在您的帖子中添加 [kotlin](或其他使用的语言)标签,以便您的代码突出显示并更易于阅读
标签: android-studio kotlin android-jetpack-compose