为什么在设置观察者之前值改变时LiveData观察者执行?



我这样测试LiveData

// MainActivity.kt
class MainActivity : AppCompatActivity() {

val testViewModel: TestViewModel by viewModels()

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
testViewModel.testLiveData.value = true
testViewModel.testLiveData.observe(this) {
println("Hello")
}
}
}
// TestViewModel.kt
class TestViewModel : ViewModel(){
val testLiveData = MutableLiveData<Boolean>()

}

我想…(livedata).observe均值开始观察liveData值的变化。
我不认为在设置观察者之前改变的值是不可观察的。
但是,它打印hello....
我对实时数据观察者有误解吗?

当你开始观察一个LiveData时,如果LiveData已经有了一个值,它会立即将这个值重放给观察者。这是经过设计的,因为LiveData通常在ViewModel中,它比视图存在的时间长。例如,当屏幕旋转时,将重新创建所有视图,并重新开始观察。所有视图都将使用LiveData的最新值进行更新。如果它不这样做,那么当屏幕旋转和活动/片段被重新创建时,它们将只是坐在那里,没有什么可观察的,违背了使用ViewModel来保留超出视图的状态的目的。

相关内容

  • 没有找到相关文章

最新更新