提问人:Jojo Drink 提问时间:10/16/2023 更新时间:10/19/2023 访问量:90
如何在 Android 上将 viewmodel 中的上下文与 Hilt 一起使用
How to use context in viewmodel with Hilt on Android
问:
在我的应用程序中,我使用了 MVVM 并且我有 ViewModel,但我想将上下文访问到 viewModel。
我将以下代码写入 ViewModel 中:
@HiltViewModel
class SimpleViewModel @Inject constructor(
private val repository: SimpleRepository, @ApplicationContext val context: Context
) : ViewModel() {
但是在上下文中向我显示警告并向我显示此消息:This field leaks a context object
将上下文访问到视图模型的最佳方式是什么?
答:
正如本答案中所述,使用时不会发生泄漏,因为上下文将始终比视图模型实例更长,这只是一个误报警告,您甚至可以通过使用内存探查器来确认不会发生。@ApplicationContext
您可以通过向 View Model 类添加来忽略该警告。@SuppressLint("StaticFieldLeak")
评论
在 viewModels 或 android 中的任何非活动文件中,上下文都在那里 如果你想要上下文,那么你必须创建一个应用程序文件,并在清单应用程序中声明应用程序文件名,如
android:name = ".ApplicationFile"
在该 applicationFile 中,您必须编写一个类似
val applicationScope = CoroutineScope(SupervisorJob())
override fun onCreate() {
super.onCreate()
appContext = applicationContext
appPreferences = AppPreference(applicationContext)
}
companion object{
var appPreferences: AppPreference? = null
lateinit var appContext:Context
}in viewModels or in any non activity file in android the context is there
如果你想要上下文,那么你必须创建一个应用程序文件,并在清单应用程序中声明应用程序文件名,如
android:name = ".ApplicationFile"
在该 applicationFile 中,您必须编写一个类似 val applicationScope = CoroutineScope(SupervisorJob())
override fun onCreate() {
super.onCreate()
appContext = applicationContext
appPreferences = AppPreference(applicationContext)
}
companion object{
var appPreferences: AppPreference? = null
lateinit var appContext:Context
}
在我看来,在 MVVM 中,我们不需要 viewModel 中的上下文,因为如果视图需要上下文,那么在 Activity/Fragment/View 本身中使用上下文。但是,如果需要上下文来启动存储库中的库(例如改造、房间等),请使用 Hilt 中的应用程序上下文。
请随时评论我的意见,因为我还在学习。
评论