val password by lazy {
MutableLiveData<String>()
}
init {
initObservable()
}
private fun initObservable() {
password.observeForever {
...
}
}
根据我在文档中的理解,每次实例化ViewModel的视图(使用前面的代码)被破坏时,我都应该删除观察者,对吗?但是,一旦视图被销毁(因为ViewModel实例在视图中被实例化,也将被销毁),观察者不应该被销毁吗?
“每次实例化ViewModel的视图(使用前面的代码)被破坏时,我都应该删除观察者,对吗?”
如果您在ViewModel中使用ObserveForever(观察者)
观察LiveData
:
onClearle()
,因此您应该在这里处理删除观察者。“但是,一旦视图被销毁(因为ViewModel实例在视图中被实例化,也将被销毁),观察者不应该被销毁吗?”
这个问题更像是Java问题,而不是Android问题。
想想“被摧毁”是什么意思。当一个视图或ViewModel被Android框架破坏时,并不意味着该对象被完全从内存中移除。只要有其他对象(如observer)引用您的活动和片段,它们就不会被垃圾收集。
问题内容: 阅读针对iOS 9的这篇文章后,我知道您不再需要removeObserver。 然而,对于iOS 8的,你需要给 removeObserver 在中的viewController的方法。但我无法理解。如果一个viewController被释放,那么它的DEAD不是吗?为什么我们需要做一个removeObserver。作为观察员就像打电话给永远不会接电话的死者一样 我不明白什么? 问题答
我之所以说怪异,是因为我不明白有人可能会告诉我什么在按预期工作。 我有一个带有LiveData成员的Android ViewModel,我在Main活动中观察到它来切换一些代码功能。LiveData对象在视图模型的构造函数中被分配初始值。 从理论上讲,一切都很好,只是在安装后第一次启动应用程序和随后启动应用程序之间,观察者的行为会发生变化。 在安装后的第一次启动期间,在我设置好观察者之后,它们会立
当项目添加到LiveData列表时,我需要获得一个Observer事件。但据我所知,只有当我用新列表替换旧列表时,事件才会收到。例如,当我执行下一个操作时: 观察者获取事件。但当我将项目添加到值中时,观察者是沉默的。你能给我一些建议吗?
我对的理解是,它将触发观察者对当前数据的状态变化,而不是对一系列历史数据的状态变化。 目前,我有一个,它执行写操作,将非垃圾数据更改为垃圾数据。 我还提供了另一个,它观察被丢弃的数据。 请考虑以下场景。 当前有0个被丢弃的数据。 是当前活动的片段。尚未创建。 添加了%1个废数据。 现在,有%1个被丢弃的数据 我们使用导航抽屉,将替换为。 的观察者将首先接收,其中有0个被丢弃的数据 同样,的观察者将
此外,为什么Viewmodel不能观察到它自己的LiveData的变化?