为什么要使用 AndroidViewModel?
Why using AndroidViewModel?
我阅读了很多从 AndroidViewModel 派生的 ViewModel,这当然需要一个应用程序引用。
class SomeViewModel(application: Application) : AndroidViewModel(application)
- 但是为什么要这样做呢?看到应用程序移交给 ViewModel 令我很伤心。什么是可接受的用例?
- 如果有任何理由使用 AndroidViewModel,是否可以不从 ViewModel 派生 + 使用 dagger2 进行应用程序注入?
因为它需要应用程序引用,所以它可以提供有用的上下文(例如:用于系统服务)。
参见 -
并非所有的代码库都是一样的。 AndroidViewModel
可以成为在没有很多抽象或分层的“遗留”代码库中进行增量重构的有用工具(阅读:Activity
/Fragment
上帝对象)。
作为来自“遗留”代码库的桥梁,在这种情况下使用它是有意义的。
- But why would one do this? It hurts me to see application handed over to ViewModel. What would be an acceptable use case for this?
AndroidViewModel
的用例是访问 Application
。在“遗留”代码库中,将“Context/Application-dependent 代码”移出 Activities 和 Fragments 是相对安全的,无需进行冒险的重构。在这种情况下,需要在视图模型中访问 Application
。
- If there is any reason to use AndroidViewModel, can one not derive from ViewModel + use dagger2 for the application inject?
如果您没有注入任何其他东西,那么充其量这是一种获取 Application
引用的便捷方式,而无需键入强制转换或根本不使用任何 DI。
如果您要注入其他成员,无论是使用 DI 框架还是 ViewModelFactory
,这是一个偏好问题。
如果您将 ViewModel
直接注入您的 Activity
/Fragment
,您将失去平台为您提供的好处。您必须手动确定 VM 的生命周期范围,并为 UI 的生命周期手动清除 VM,除非您还弄乱了 ViewModelStore
s 或任何其他涉及保留的组件。那时,它只是名称上的视图模型。
我阅读了很多从 AndroidViewModel 派生的 ViewModel,这当然需要一个应用程序引用。
class SomeViewModel(application: Application) : AndroidViewModel(application)
- 但是为什么要这样做呢?看到应用程序移交给 ViewModel 令我很伤心。什么是可接受的用例?
- 如果有任何理由使用 AndroidViewModel,是否可以不从 ViewModel 派生 + 使用 dagger2 进行应用程序注入?
因为它需要应用程序引用,所以它可以提供有用的上下文(例如:用于系统服务)。
参见 -
并非所有的代码库都是一样的。 AndroidViewModel
可以成为在没有很多抽象或分层的“遗留”代码库中进行增量重构的有用工具(阅读:Activity
/Fragment
上帝对象)。
作为来自“遗留”代码库的桥梁,在这种情况下使用它是有意义的。
- But why would one do this? It hurts me to see application handed over to ViewModel. What would be an acceptable use case for this?
AndroidViewModel
的用例是访问 Application
。在“遗留”代码库中,将“Context/Application-dependent 代码”移出 Activities 和 Fragments 是相对安全的,无需进行冒险的重构。在这种情况下,需要在视图模型中访问 Application
。
- If there is any reason to use AndroidViewModel, can one not derive from ViewModel + use dagger2 for the application inject?
如果您没有注入任何其他东西,那么充其量这是一种获取 Application
引用的便捷方式,而无需键入强制转换或根本不使用任何 DI。
如果您要注入其他成员,无论是使用 DI 框架还是 ViewModelFactory
,这是一个偏好问题。
如果您将 ViewModel
直接注入您的 Activity
/Fragment
,您将失去平台为您提供的好处。您必须手动确定 VM 的生命周期范围,并为 UI 的生命周期手动清除 VM,除非您还弄乱了 ViewModelStore
s 或任何其他涉及保留的组件。那时,它只是名称上的视图模型。