首页 > 解决方案 > “此字段泄漏上下文对象”警告 Hilt Injection

问题描述

我的问题与此处的这个问题类似,在接受的答案中,该问题已在 2.31.2 版中解决。但是警告对我来说仍然存在,我使用的是 2.37 版。其他答案对我来说仍然不清楚(实际上并未确认发生了什么)。所以这是我的 ViewModel 代码:

@HiltViewModel
class DetailViewModel @Inject constructor(
    private val context: Context,
    private val repository: VaccineRepository,
) : ViewModel() {

这是提供功能:

@Singleton
@Provides
fun provideApplicationContext(
    @ApplicationContext appContext: Context
): Context = appContext

它确实有效,但警告困扰着我。那么,这只是错误警告,我可以压制它还是实际上泄漏了?

标签: androidkotlindagger-hilt

解决方案


由于ViewModels 旨在在存储活动上下文的活动娱乐中生存,因此会泄漏您的上下文(由于活动的性质很容易破坏)。但是应用程序上下文在整个应用程序中是唯一的,直到整个应用程序被杀死,因此不会有任何实际泄漏,您可以通过添加@SuppressLint("StaticFieldLeak")到您的DetailViewModel类来忽略警告。

检查应该考虑您的@ApplicationContext注释并提出有意义的结果,但它没有。


推荐阅读