提问者:小点点

使用Hilt注入上下文:此字段泄漏上下文对象


我正在使用Hilt将上下文和其他依赖项注入我的HomeViewModel类;一切都正常工作,但我收到了这个警告。我如何防止泄漏?

这是我的HomeFragment(我在其中注入和使用HomeViewModel类):

@AndroidEntryPoint
class HomeFragment : Fragment() {

private val viewModel: HomeViewModel by viewModels()

....

}

这是警告:

class HomeViewModel @ViewModelInject constructor(
    @ApplicationContext val context: Context,
    private val locationAPI: LocationAPI,
    private val imagesAPI: ImagesAPI
) :
    ViewModel() {
...
}

我正在使用:

//Hilt DI
implementation "com.google.dagger:hilt-android:2.30.1-alpha"
kapt "com.google.dagger:hilt-android-compiler:2.30.1-alpha"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha02"
kapt "androidx.hilt:hilt-compiler:1.0.0-alpha02"

谢谢!

--根据建议,在第一个给定的答案之后编辑:

现在的家庭片段是:

@HiltViewModel
class DetailsViewModel @Inject constructor(
    @ApplicationContext val context: Context,
    private val locationDetailsAPI: LocationAPI) :
    ViewModel() {
...

}

依赖项更新为:

//Hilt DI
implementation "com.google.dagger:hilt-android:2.31-alpha"
kapt "com.google.dagger:hilt-android-compiler:2.30.1-alpha"
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.0.0-alpha03"

我仍然收到这个泄漏错误。

有什么想法吗?


共3个答案

匿名用户

在我面对那个警告之后

我决定配置文件内存以保证该方法导致内存泄漏但我发现是相当有趣的

是的,没有泄漏,这只是一个警告,所以不要再关心它了,快乐编码;)

匿名用户

改为注入应用程序:

@Inject constructor(private val application: Application)

然后您可以像这样获取应用程序上下文:

application.applicationContext

匿名用户

我没有得到这个警告,我以同样的方式注入上下文。

尝试更新到2.31.2-alpha的希尔特和1.0.0-alpha03的希尔特androidx

有一些重大变化。您需要使用@HiltViewModel注释视图模型,使用@Inject而不是@ViewModelInject。您需要将对ApplicationComponent的任何引用替换为SingletonComponent。