【问题标题】:What is the difference between ViewModel that extends BaseObservable and Android ViewModel Class?扩展 BaseObservable 的 ViewModel 和 Android ViewModel 类有什么区别?
【发布时间】:2018-10-20 14:02:52
【问题描述】:

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

【问题讨论】:

    标签: java android mvvm observable viewmodel


    【解决方案1】:

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

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

    【讨论】:

    • "Activity 销毁时 ViewModel 将被销毁。"这在技术上是不正确的,ViewModel 背后的主要思想是持久化配置更改。这就是在 onCreate 中使用 ViewModelProvider 而不是直接构造的原因。
    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 我对 BaseObservale 和 SingleLiveEvent 有点困惑。请解释这两个用例
    • 这个答案与问题无关。这是关于 ViewModel 和 AndroidViewModel 之间的区别。问题是关于 viewmodel 和 baseobservable 之间的差异
    猜你喜欢
    • 2021-06-04
    • 2020-07-18
    • 2010-12-25
    • 2017-12-15
    • 1970-01-01
    • 2010-12-25
    • 2018-03-25
    • 2012-08-11
    • 2018-02-19
    相关资源
    最近更新 更多