1

我正在使用 Kotlin 进行 Android 开发。有趣的问题。在 Java 中,在静态字段中保存 Context 是内存泄漏。但如果我将上下文存储在 Kotlin 伴随对象中,Android Studio 不会说这是内存泄漏。这意味着在 Java 字节码伴随对象不是静态代码?例如:

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        appContext = applicationContext
    }

    companion object {
        lateinit var appContext: Context
    }
}

这里没有内存泄漏?感谢您的回答:)

4

1 回答 1

4

您的代码实际上确实以Context静态方式存储 a ,只是 lint 无法提取它并出于某种原因警告您。

但是,在这种特定情况下,您并没有真正面临造成内存泄漏的风险。您正在Application静态存储对象本身,这将在您的应用程序的整个生命周期中保持活动状态 - 就像静态变量一样。如果这是其他一些更短的寿命,你会遇到麻烦Context,但应用程序Context应该没问题。

有关这样做是否安全的参考:

于 2018-08-31T13:43:41.613 回答