Java Android架构组件中AndroidViewModel和ViewModel的区别是什么?

Java Android架构组件中AndroidViewModel和ViewModel的区别是什么?,java,android,android-lifecycle,android-architecture-components,Java,Android,Android Lifecycle,Android Architecture Components,我已经在Android架构组件上工作了一段时间,该组件是在Google IO 2017中引入的 为了避免配置更改,他们提供了ViewModel和AndroidViewModel类 根据文件: AndroidViewModel:应用程序上下文感知ViewModel ViewModel:ViewModels还可以用作活动不同片段之间的通信层。每个片段都可以通过其活动使用相同的键获取ViewModel 但对于和OIRDViewModel场景,我可以通过将类扩展到应用程序类来获取应用程序上下文 在And

我已经在Android架构组件上工作了一段时间,该组件是在Google IO 2017中引入的

为了避免配置更改,他们提供了
ViewModel
AndroidViewModel

根据文件:

AndroidViewModel:应用程序上下文感知
ViewModel

ViewModel:ViewModels还可以用作活动不同片段之间的通信层。每个片段都可以通过其活动使用相同的键获取
ViewModel

但对于
和OIRDViewModel
场景,我可以通过将类扩展到应用程序类来获取应用程序上下文

在Android开发中,它们之间的实际区别是什么?因为两者都只附加到活动/片段生命周期

但对于AndoirdViewModel场景,我可以通过将类扩展到应用程序类来获取应用程序上下文

创建自己的
应用程序的自定义子类
不会神奇地使该单例实例可用于
视图模型

可以创建
Application
的自定义子类,该子类有自己的
getInstance()
方法或直接公开单例的东西。谷歌不喜欢这种模式(我也不喜欢),因此谷歌不会引导开发者使用它

在Android开发中,它们之间的实际区别是什么


ViewModel
本身没有获得
上下文的好方法
AndroidViewModel
提供了一个
应用程序
用作
上下文
,并专门提供了
应用程序
单例,因此我们确信
上下文
本身并不表示内存泄漏。

您在同一问题中提出了两个问题,我相信您可以切换标题,集中讨论为什么使用AndroidViewModel而不是扩展应用程序。@commonware给出的答案仍然有效。通过这种方式,您可以要求删除“重复”标记,因为创建一个新问题可以获得一个好的答案。。。我认为这不是一个好主意。出于好奇,为什么谷歌(或你)不喜欢getInstance()应用程序的子类?@neteinstein:我不能代表谷歌说话。我不是一个粉丝,因为它使得使用
应用程序
太容易了,而且很多时候
应用程序
使用的
上下文
类型是错误的。