我是否可以安全地注入上下文? Dagger,Android Studio警告

时间:2018-10-11 12:38:24

标签: android android-studio dagger-2

据我了解,在此处阅读其他答案并进行研究,将Application Context注入字段应该可以防止内存泄漏,而将Activity Context保留在字段中会导致内存泄漏。

我正在使用Dagger注入Application上下文,如下所示:

AppModule:

@Singleton
@Provides
fun provideContext(application: Application): Context {
    return application
}

ViewModel:

// Injected context provided by Dagger
@Inject
lateinit var mContext: Context

Android Studio仍然在注入的上下文字段上抛出此警告:

  

此字段泄漏上下文对象

它实际上是在泄漏上下文对象,还是Android Studio不能确定其注入的应用程序上下文,我应该忽略该警告?我需要注入它作为弱参考吗?谢谢。

1 个答案:

答案 0 :(得分:2)

从技术上讲,您无法泄漏应用程序上下文,因为只要应用程序处于活动状态,应用程序上下文就可用。 (这种自我解释)。

最简单的方法是忽略警告,它不会给您带来麻烦。

如果您仍然想纠正该警告,则可以注入上下文的WeekReference。 (周参考)。这可能会解决您的问题,但是在每次使用上下文之前都需要进行空检查。

此外,如果您使用的是Android LiveCycle ViewModel,则应该知道可以使用AndroidViewModel(而不是简单的ViewModel),而这需要在构造函数中传递上下文实例,并且可以使用它代替应用程序上下文。