“此字段泄漏了上下文对象”警告 Hilt 注入

wir*_*dev 2 android kotlin dagger-hilt

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

@HiltViewModel
class DetailViewModel @Inject constructor(
    private val context: Context,
    private val repository: VaccineRepository,
) : ViewModel() {
Run Code Online (Sandbox Code Playgroud)

这是提供的功能:

@Singleton
@Provides
fun provideApplicationContext(
    @ApplicationContext appContext: Context
): Context = appContext
Run Code Online (Sandbox Code Playgroud)

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

Sdg*_*emi 7

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

检查应该考虑您的@ApplicationContext注释并得出有意义的结果,但事实并非如此。