Kotlin 伴随对象内存泄漏?
Memory leak in Kotlin companion objects?
我正在使用 Kotlin 进行 Android 开发。有趣的问题。 Java 在静态字段中保存上下文是内存泄漏。但是,如果我将上下文存储在 Kotlin 伴随对象中,Android Studio 不会说这是内存泄漏。这意味着在 Java 字节码伴随对象不是静态代码?
例如:
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
appContext = applicationContext
}
companion object {
lateinit var appContext: Context
}
}
这里没有内存泄漏?感谢您的回答:)
您的代码实际上确实以静态方式存储 Context
,只是 lint 出于某种原因无法提取它并警告您。
但是,在这种特定情况下,您实际上并没有造成内存泄漏的风险。您正在静态存储 Application
对象本身,它将在应用程序的整个生命周期中保持活动状态——就像静态变量一样。如果这是其他一些寿命较短的 Context
,您会遇到麻烦,但应用程序 Context
应该没问题。
关于这样做是否安全的参考:
- Is it safe to save the app context to a static variable in Android?
- Is it a bad practice to hold application Context instance?
我正在使用 Kotlin 进行 Android 开发。有趣的问题。 Java 在静态字段中保存上下文是内存泄漏。但是,如果我将上下文存储在 Kotlin 伴随对象中,Android Studio 不会说这是内存泄漏。这意味着在 Java 字节码伴随对象不是静态代码? 例如:
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
appContext = applicationContext
}
companion object {
lateinit var appContext: Context
}
}
这里没有内存泄漏?感谢您的回答:)
您的代码实际上确实以静态方式存储 Context
,只是 lint 出于某种原因无法提取它并警告您。
但是,在这种特定情况下,您实际上并没有造成内存泄漏的风险。您正在静态存储 Application
对象本身,它将在应用程序的整个生命周期中保持活动状态——就像静态变量一样。如果这是其他一些寿命较短的 Context
,您会遇到麻烦,但应用程序 Context
应该没问题。
关于这样做是否安全的参考:
- Is it safe to save the app context to a static variable in Android?
- Is it a bad practice to hold application Context instance?