LiveData 封装在 Android Studio 和 Kotlin 中是如何工作的?

How LiveData encapsulation works in AndroidStudio and Kotlin?

我正在做一个项目,我有 ViewModel 并使用封装的 LiveData。

private val _counter = MutableLiveData<Int>()
val counter: LiveData<Int>
    get() = _counter

在 activity 一侧,我观察来自 ViewModel 的计数器。

viewModel.counter.observe(this, Observer {
    binding.clickCounterText.text = it.toString()
})

在 ViewModel 中,我只使用 _counter,但计数器观察者知道 _counter 已更改? 怎么运行的? _counter改变时counter如何改变?

有人能给我解释一下吗? 谢谢

counter_counter 的向上转换,因为 _counterMutableLiveDataMutableLiveDataLiveData 的子类。当 Activity 调用 counter 它实际上得到了 _counter 的引用,所以当 Activity 观察 counter 它实际上观察 _counter.

In ViewModel I only work with _counter, but counter observer knows that _counter have been changed? HOW IT WORKS? How is counter changed when _counter is changed?

_counterMutableLiveData<Int>() 初始化,而 counter 引用 _counter 的实例。两者都是引用同一个实例,两者之间的唯一区别是counter是LiveData类型而_counterMutableLiveData。由于 reference/instance 相同,任何更改都会触发 两者