随着Android Architecture Components库的引入,引入了几个新类,包括AndroidViewModel
和ViewModel
。但是,我很难弄清楚这两个类之间的区别。 documentation简要描述了AndroidViewModel
如下:
了解应用程序上下文
ViewModel
我感谢您的简短,但这究竟意味着什么?什么时候我们应该选择在AndroidViewModel
上使用ViewModel
,反之亦然?
如果需要在视图模型中使用上下文,则应使用AndroidViewModel,因为它包含应用程序上下文(以检索上下文调用getApplication(),否则应使用常规ViewModel。
AndroidViewModel具有Application Context。大家都知道具有静态上下文实例很危险!(可能导致内存泄漏!)
但是,拥有静态应用程序实例并不像您想象的那样糟糕
因为在我们正在运行的应用程序中只有一个Application实例。
因此,在特定的类中使用&拥有Application实例通常不是问题。
但是,如果应用程序实例引用了它们,则由于引用周期问题而成为问题。
最后我得到一个更简单的解释,有点……... AndroidViewModel类是ViewModel的子类,与之相似,它们旨在存储和管理与UI相关的数据,负责为UI准备和提供数据,并自动允许数据在配置更改中幸免。
与AndroidViewModel的唯一区别是它与应用程序上下文一起提供,如果您需要上下文来获取系统服务或有类似要求,这将很有帮助。粗体字使其更清晰易懂。