documentation声明以下内容:
如果ViewModel需要Application上下文,例如以查找系统服务,它可以扩展AndroidViewModel类,并具有一个构造函数,该构造函数在构造函数中接收Application,因为Application类扩展了Context。
代码示例:
class MainViewModel(application: Application) : AndroidViewModel(application) {
...
}
两个问题:
Application
传递给ViewModel的ctor,AndroidViewModel将如何帮助我?Application
,为什么我需要AndroidViewModel?我可以只使用ViewModel并将其传递给Application
。如果您提供自己的工厂,则可以将所需的任何内容传递给常规ViewModel
对象,对此您是正确的。
但是,如果使用的是默认工厂,the source code显示如果ViewModel扩展为Application
,则默认工厂only会为您填写AndroidViewModel
实例。
您可以在不扩展ViewModel
的情况下编写自定义AndroidViewModel
,并且在功能上是相同的。
默认情况下只有差异ViewModelFactory
检查ViewModel
是否为AndroidViewModel
的实例,并自动调用传递给Application
上下文的单参数构造函数。
[通常,最好避免在Context
中使用ViewModel
(即Android特定功能),使其包含独立于Android的业务逻辑。
因此,如果您的ViewModel
使用应用上下文,则最好通过子类化AndroidViewModel
使其明确。