【发布时间】:2018-10-20 14:02:52
【问题描述】:
我目前正在研究 MVVM 架构模式,但我对扩展 BaseObservable 的自定义 ViewModel 类和 Android 本身提供的另一个 ViewModel 感到困惑。
【问题讨论】:
标签: java android mvvm observable viewmodel
我目前正在研究 MVVM 架构模式,但我对扩展 BaseObservable 的自定义 ViewModel 类和 Android 本身提供的另一个 ViewModel 感到困惑。
【问题讨论】:
标签: java android mvvm observable viewmodel
您的自定义 ViewModel 只是您的视图的数据持有者,并且因为它绑定到您的视图(并且因为它是一个 Observable 对象),它可以通知视图有关数据的更改。但是,它不知道方向变化(视图旋转)等配置变化,因此,在这种情况下,程序员应该保存和恢复数据example here。
另一方面,Android 提供的 ViewModel 知道这些配置更改,因此其数据在整个活动生命周期中是一致的。 ViewModel 将在 Activity 销毁时被销毁。
【讨论】:
ViewModel() 超类和 AndroidViewModel() 超类之间的主要区别在于 AndroidViewModel() 引用了应用程序的上下文(而不是活动上下文本身)。
应该在配置更改(例如旋转手机)时销毁并重新创建活动。因此将上下文传递给 ViewModel 是一个坏主意,因为它往往会导致内存泄漏(对被破坏活动的引用)。
ViewModel 旨在承受这些配置更改,但 ViewModel() 没有对 Context 的任何引用。
另一方面,AndroidViewModel() 具有应用程序的引用(一种特殊类型的上下文),因此您可以访问应用程序特定的信息,例如 packageManager。
class MyViewModel(application: Application) : AndroidViewModel(application)
【讨论】: