为什么 LiveData 观察器在设置观察器之前更改值时执行?
Why LiveData observer execute when value changed before set observer?
我这样测试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 的最新值进行更新。如果它不这样做,那么当屏幕旋转并重新创建 Activities/Fragments 时,它们将只是坐在那里,没有什么可观察的,这违背了使用 ViewModel 来保留比视图更长寿的状态的目的。
我这样测试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 的最新值进行更新。如果它不这样做,那么当屏幕旋转并重新创建 Activities/Fragments 时,它们将只是坐在那里,没有什么可观察的,这违背了使用 ViewModel 来保留比视图更长寿的状态的目的。