FusedLocationProviderClient在Android的MVVM架构中扮演什么角色?

4
我正在开发一个Android应用程序,在启动应用程序时需要向用户展示天气数据。我遵循MVVM架构,并已成功地在所有实现的用例中遵循了MVVM,包括向用户显示数据和操作SharedPreferences以供设置屏幕使用。我正在使用FusedLocationProviderClient获取用户位置,但它需要Context进行实例化。在遵守MVVM架构的同时,应该如何处理这个问题呢?
我不能从ViewModel中实例化它,因为这将导致Context传递到ViewModel中,从而可能导致内存泄漏。
目前,我正在从我的Fragment中使用FusedLocationProviderClient并从那里更新数据,但这是一种非常朴素的方法,明显违反了MVVM原则。

1
在您的Activity中实例化它,然后将其传递给ViewModel(就像您应该对所有依赖项进行的操作一样)。查看ViewModelFactory https://proandroiddev.com/view-model-creation-in-android-android-architecture-components-kotlin-ce9f6b93a46b - Blundell
我无法从ViewModel实例化它,但如果您使用AndroidViewModel,则可以在技术上实现。 - Tim
1个回答

3

通过继承自 AndroidViewModel,你可以获得上下文(Context),然后你就可以在那里处理与SharedPreferences相关的内容,而不违反MVVM模式。


1
ViewModel 不应包含 Android 框架特定的代码。为什么呢?因为 ViewModel 本身就是“Android 框架特定”的。 - Tim
是的,它默认属于Jetpack,所以我会相应地更改我的答案。 - Zafer Celaloglu
我对如何在MVVM中适应有些困惑。我想要实时更新纬度和经度,我认为我可以在ViewModel中使用FusedLocationProviderClient来实现,但我不知道它应该在生命周期的哪个方法中。@ZaferCelaloglu,你能帮帮我吗?我正在学习Android,这是我的第一个项目。 - Josseline Perdomo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接