我目前正在研究MVVM架构模式,但我在扩展BaseObservable的Custom ViewModel类和Android本身提供的另一个ViewModel之间感到困惑。
答案 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
与片段或活动相关联,然后您将获得相同的实例,并将数据保留在配置更改中