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

2022-09-01 19:31:52

我目前正在研究MVVM架构模式,但我混淆了Extended BaseObservable的Custom ViewModel类和Android本身提供的另一个ViewModel。


答案 1

您的自定义 ViewModel 只是视图的数据持有者,并且由于它绑定到您的视图(并且因为它是可观察对象),因此它可以通知视图有关数据更改的信息。但是,它不知道诸如方向更改(视图旋转)之类的配置更改,因此,在这种情况下,程序员应在此处保存和恢复数据示例

另一方面,Android提供的ViewModel可以识别这些配置更改,因此其数据在整个活动生命周期中都是一致的。当活动销毁时,ViewModel 将被销毁。


答案 2

ViewModel() 超类和 AndroidViewModel() 超类之间的主要区别在于 AndroidViewModel() 引用了应用程序的上下文(而不是活动上下文本身)。

活动应该在配置更改时销毁并重新创建(如旋转手机)。因此,将上下文传递给ViewModel是一个坏主意,因为它倾向于内存泄漏(引用已销毁的活动)。

ViewModel 旨在保留这些配置更改,但 ViewModel() 没有任何对上下文的引用。

另一方面,AndroidViewModel()具有应用程序(一种特殊类型的上下文)的引用,因此您可以访问特定于应用程序的信息,例如packageManager。

class MyViewModel(application: Application) : AndroidViewModel(application)

推荐