[AndroidViewModel vs ViewModel

问题描述 投票:127回答:2

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

了解应用程序上下文ViewModel

我感谢您的简短,但这究竟意味着什么?什么时候我们应该选择在AndroidViewModel上使用ViewModel,反之亦然?

android mvvm android-architecture-components
2个回答
183
投票

如果需要在视图模型中使用上下文,则应使用AndroidViewModel,因为它包含应用程序上下文(以检索上下文调用getApplication(),否则应使用常规ViewModel。

编辑

AndroidViewModel具有Application Context。大家都知道具有静态上下文实例很危险!(可能导致内存泄漏!)

但是,拥有静态应用程序实例并不像您想象的那样糟糕

因为在我们正在运行的应用程序中只有一个Application实例。

因此,在特定的类中使用&拥有Application实例通常不是问题。

但是,如果应用程序实例引用了它们,则由于引用周期问题而成为问题。

See Also about Application Instance


0
投票

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

与AndroidViewModel的唯一区别是它与应用程序上下文一起提供,如果您需要上下文来获取系统服务或有类似要求,这将很有帮助。粗体字使其更清晰易懂。

© www.soinside.com 2019 - 2024. All rights reserved.