随着Android Architecture Components库的引入,引入了几个新类,包括AndroidViewModelViewModel。但是,我很难弄清楚这两个类之间的区别。 documentation简要描述了AndroidViewModel,如下所示:



我很感谢您的简短说明,但这到底意味着什么?我们何时应该选择使用AndroidViewModel而不是ViewModel,反之亦然?

最佳答案

AndroidViewModel提供应用程序上下文

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

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

因此,在特定类中使用Application实例并使其具有通常不是问题。但是,如果应用程序实例引用了它们,则由于引用周期问题而成为问题。

See Also about Application Instance

AndroidViewModel对单元测试有问题

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

10-06 11:29