【问题标题】:Am I injecting context safely? Dagger, Android Studio warning我是否安全地注入了上下文?匕首,Android Studio 警告
【发布时间】:2018-10-11 12:38:24
【问题描述】:

根据我在这里阅读其他答案和研究的理解,将应用程序上下文注入字段应该可以避免内存泄漏,而在字段中保存 Activity 上下文会导致内存泄漏。

我正在像这样使用 Dagger 注入应用程序上下文:

应用模块:

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

视图模型:

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

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

这个字段泄露了一个上下文对象

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

【问题讨论】:

    标签: android android-studio dagger-2


    【解决方案1】:

    从技术上讲,您不能泄漏应用程序上下文,因为只要应用程序处于活动状态,应用程序上下文就可用。 (有点不言自明)。

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

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

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

    【讨论】:

    • 我不知道 AndroidViewModel。这是一个更简单的解决方案,经过测试并解决了注入上下文的问题和需求。谢谢
    • 很高兴我能帮上忙 :)
    猜你喜欢
    • 2023-04-06
    • 2017-06-03
    • 2015-07-26
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多