扩展BaseObservable的ViewModel和Android ViewModel类有什么区别?

26
我目前在学习MVVM架构模式,但是我在自定义继承BaseObservable的ViewModel类和Android提供的另一个ViewModel之间感到困惑。
2个回答

9
你的自定义ViewModel只是一个数据容器,因为它与你的视图绑定(并且它是一个Observable对象),所以它可以通知视图关于数据变化的信息。然而,它不知道配置更改,比如屏幕方向的变化,因此,在这种情况下,程序员应该保存和恢复数据,例如在这个例子中。
另一方面,由Android提供的ViewModel知道这些配置更改,因此它的数据在整个活动生命周期中都是一致的。当活动销毁时,ViewModel也会被销毁。

5
“当Activity销毁时,ViewModel将被销毁。” 这在技术上是不正确的,ViewModel的主要思想是为了保留配置更改。这就是为什么在onCreate中使用ViewModelProvider而不是直接构建的原因。 - Daniel Andujar

1
ViewModel()和AndroidViewModel()的主要区别在于,AndroidViewModel()具有对应用程序上下文的引用(而不是活动上下文本身)。
活动在配置更改时(如旋转手机)应被销毁并重新创建。因此,向ViewModel传递上下文是一个坏主意,因为它容易导致内存泄漏(对已销毁的活动的引用)。
ViewModel旨在幸存这些配置更改,但ViewModel()没有任何对上下文的引用。
另一方面,AndroidViewModel()具有对应用程序(一种特殊类型的上下文)的引用,因此您可以访问特定于应用程序的信息,如PackageManager。
class MyViewModel(application: Application) : AndroidViewModel(application)

我对BaseObservale和SingleLiveEvent有点困惑,请解释一下它们的用例。 - Ness Tyagi
这个回答与问题无关,它是关于 ViewModel 和 AndroidViewModel 之间的区别。而问题是关于 viewmodel 和 baseobservable 之间的区别。 - Hans

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接