ViewModel和AndroidViewModel有什么区别?

3

对于任何有这个问题的人,

根据Android文档,

由于ViewModel比特定的活动和片段实例寿命更长,因此它不应引用View或任何可能持有对活动上下文的引用的类。如果ViewModel需要Application上下文(例如,查找系统服务),则可以扩展AndroidViewModel类,并在构造函数中接收Application(因为Application类扩展了Context)。

文档可以在此处找到: https://developer.android.com/topic/libraries/architecture/viewmodel.html

编辑: 对于重复的解释: 我的意思是您可以将类扩展到ViewModel以及AndroidViewModel。您应该扩展哪个,以上解释就是为此而设。上面的链接介绍了MVVM架构中的ViewModel,而不是android.arch.lifecycle.ViewModel。


我是说你可以将类扩展为ViewModel以及AndroidViewModel。当你应该扩展哪个时,上面的解释就是为了那个问题。上面的链接介绍了MVVM架构中ViewModel的一般情况,而不是android.arch.lifecycle.ViewModel。 - Rahul
@M0CH1R0N:请阅读上面的评论。如果您觉得这是重复发布的帖子,我会尽快删除它。谢谢。 - Rahul
抱歉,我重新阅读了你的问题。AndroidViewModel继承自ViewModel,因此具有相同的所有功能。 AndroidViewModel的唯一附加功能是它具有上下文感知能力:在初始化AndroidViewModel时,您必须将上下文作为参数传递。如果您想要显示toast消息,可以使用此功能。 - M0CH1R0N
IntelliJ Amiya,能否重新打开这篇帖子? - M0CH1R0N
感谢一样。 - Rahul
@M0CH1R0N 重新打开。 - IntelliJ Amiya
1个回答

17

进一步解释我的评论:

AndroidViewModel 扩展了 ViewModel,因此它具有相同的功能。AndroidViewModel 唯一额外的功能是它具有上下文感知:在初始化 AndroidViewModel 时,您必须将 Application 上下文作为参数传递。

举个例子,为什么这很有用,您可以显示需要应用程序上下文的 Toasts。


1
区别是正确的。但是我不会在viewModel中编写我的ui代码(Toast)。 - AndroidDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接