据我了解,在此处阅读其他答案并进行研究,将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不能确定其注入的应用程序上下文,我应该忽略该警告?我需要注入它作为弱参考吗?谢谢。
答案 0 :(得分:2)
从技术上讲,您无法泄漏应用程序上下文,因为只要应用程序处于活动状态,应用程序上下文就可用。 (这种自我解释)。
最简单的方法是忽略警告,它不会给您带来麻烦。
如果您仍然想纠正该警告,则可以注入上下文的WeekReference。 (周参考)。这可能会解决您的问题,但是在每次使用上下文之前都需要进行空检查。
此外,如果您使用的是Android LiveCycle ViewModel,则应该知道可以使用AndroidViewModel(而不是简单的ViewModel),而这需要在构造函数中传递上下文实例,并且可以使用它代替应用程序上下文。