随着 Android 架构组件库的引入,引入了几个新类,包括 AndroidViewModel
和 ViewModel
。但是,我无法弄清楚这两个类之间的区别。 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/