观察者范围不能使用全局变量


private var Name = mutableListOf<String>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModelFactory = MainViewModelFactory(repository)
viewModel = ViewModelProvider(this,viewModelFactory).get(MainViewModel::class.java)
// viewmodel data
setContent {
SimpleStockInfoTheme {
viewModel.getData().observe(this, Observer {
Name.add(it)
Log.d("EROR", Name.toString())
})
Log.d("EROR2", Name.toString())
InfoCard(name = "dad", data = 1442.32 )

}
}

在Observer范围中,全局变量Name(mutableList(有一个值(it(。但除此之外,Name是空的List。。为什么会发生这种情况??

在Observer作用域中,全局变量Name(mutableList(有一个值(it(。但除此之外,名称为空列表

Name列表在observer块之外为空,因为语句的执行顺序不同。

首先执行observer外部的Log语句,然后执行观察者博客内部的Log语句。这里发生的情况是,所有Live Data观察器都会首先注册,当同步代码的执行完成后,观察器代码的执行就会开始。

suspending函数也是如此,它们只有在所有同步代码执行完成后才会开始执行

一旦it被添加到observer块中的Name,之后访问Name将不会返回empty list

最新更新