AndroidViewModel 与 ViewModel

标签 android mvvm viewmodel android-architecture-components android-viewmodel

随着 Android 架构组件库的引入,引入了几个新类,包括 AndroidViewModelViewModel。但是,我无法弄清楚这两个类之间的区别。 documentation简明扼要地描述AndroidViewModel如下:

Application context aware ViewModel

我很欣赏它的简洁性,但这究竟意味着什么?我们什么时候应该选择使用 AndroidViewModel 而不是 ViewModel,反之亦然?

最佳答案

AndroidViewModel 提供应用上下文

如果您需要在 Viewmodel 中使用上下文,您应该使用 AndroidViewModel (AVM),因为它包含应用程序上下文。要检索上下文调用 getApplication(),否则使用常规 ViewModel (VM)。

AndroidViewModel 具有应用程序上下文。 我们都知道拥有静态上下文实例是邪恶的,因为它会导致内存泄漏!但是,拥有静态应用程序实例并不像您想象的那么糟糕,因为只有一个正在运行的应用程序中的应用程序实例。

因此,在特定类中使用和拥有 Application 实例通常不是问题。但是,如果一个Application实例引用了它们,那就是因为引用周期的问题了。

See Also about Application Instance

AndroidViewModel 单元测试有问题

AVM 提供了对单元测试有问题的应用程序上下文。单元测试不应处理任何 Android 生命周期,例如上下文。

关于AndroidViewModel 与 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44148966/

相关文章:

android - 如何有效地使用 android-architecture-components?

android - 在安装时将 Ruboto-Core 包含在 Android 应用程序中

android - 来自地理标记照片的 GPS 经度和纬度

silverlight - 在我的 ViewModel 中使用 DataServiceCollection 时如何实现 "Blendability"

android - 在不同 Activity 中的 Fragment 之间共享 ViewModel

serialization - 为什么 MvvmCross 没有导航对象的内在序列化?

java - 奇怪的 android.content.res.Resources$NotFoundException : Unable to find resource ID #0x7f06008d

android - react- native : 'adb' is not recognized as an internal or external command, 可运行程序或批处理文件

wpf - 从PasswordBox获取密码

c# - 如何处理图像源路径绑定(bind)的空 Uri