AndroidViewModel 与 ViewModel

新手上路,请多包涵

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

应用上下文感知 ViewModel

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

原文由 cascal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.4k
2 个回答

AndroidViewModel 提供应用上下文

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

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

因此,在特定类中使用和拥有 Application 实例通常不是问题。但是,如果 Application 实例引用它们,则会因为引用循环问题而出现问题。

另请参阅应用程序实例

AndroidViewModel 单元测试有问题

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

原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议

最后我得到了一个更简单的解释,有点…… …… AndroidViewModel类是ViewModel的子类并且与它们类似,它们旨在存储和管理与UI相关的数据负责准备&提供数据用于 UI 并自动允许数据在配置更改后继续存在。

与 AndroidViewModel 的唯一区别是它带有应用程序上下文, 如果您需要上下文来获取系统服务或有类似的要求,这将很有帮助。 粗体文字让人更清楚地感受到它。

原文由 user9830926 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题