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

时间:2018-05-10 10:14:44

标签: java android mvvm observable viewmodel

我目前正在研究MVVM架构模式,但我在扩展BaseObservable的Custom ViewModel类和Android本身提供的另一个ViewModel之间感到困惑。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

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

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

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

答案 2 :(得分:-1)

您可以在此处阅读文档:https://developer.android.com/topic/libraries/architecture/viewmodel

我认为主要的好处是使用ViewModelProvider将您的ViewModel与片段或活动相关联,然后您将获得相同的实例,并将数据保留在配置更改中