Android架构组件中的AndroidViewModel和ViewModel有什么区别?

Bur*_*hid 4 java android android-lifecycle android-architecture-components

我已经在Android架构组件上工作了一段时间,这是在Google IO 2017中引入的

他们的一个组件是为了避免配置更改它们提供的问题ViewModelAndroidViewModel

根据文件:

AndroidViewModel:应用程序上下文感知ViewModel

ViewModel:ViewModels也可以用作Activity的不同片段之间的通信层.每个片段可以ViewModel通过其Activity 获取使用相同的键

但是对于AndoirdViewModel场景,我可以通过将类扩展到Application类来获取应用程序上下文

Android开发中它们之间的实际区别是什么?因为两者仅附加到Activity/Fragment生命周期.

Com*_*are 13

但是对于AndoirdViewModel场景,我可以通过将类扩展到Application类来获取应用程序上下文

创建自己的自定义子类Application并不会神奇地使该单例实例可用于a ViewModel.

可以创建一个自定义子类,Application它有自己的getInstance()方法或直接暴露单例的东西.谷歌不喜欢这种模式(我也不喜欢这种模式),因此谷歌并没有引导开发者使用它.

Android开发中它们之间的实际区别是什么?

A ViewModel本身没有好办法获得Context.AndroidViewModel提供一个Application用作a Context,并专门提供Application单例,所以我们确信它Context本身并不代表内存泄漏.

  • @neteinstein:我不能代表谷歌发言.我不是粉丝,因为它使`Application`变得太容易了,很多​​时候`Application`是`Context`的错误类型. (3认同)