Утечка памяти в сопутствующих объектах Kotlin?
Я использую Kotlin для разработки под Android. Интересный вопрос. В Java сохранение контекста в статическом поле - это утечка памяти. Но если я храню контекст в сопутствующем объекте Kotlin, Android Studio не говорит, что это утечка памяти. Это значит, что в Java объект сопутствующего байт-кода не является статическим кодом? Например:
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
appContext = applicationContext
}
companion object {
lateinit var appContext: Context
}
}
Здесь нет утечки памяти? Спасибо за ответы:)
1 ответ
Ваш код на самом деле хранит Context
в статическом смысле, просто пух не может поднять его и по какой-то причине предупредить вас.
В этом конкретном случае, однако, вы не подвергаетесь риску утечки памяти. Вы храните свой Application
сам объект статически, который будет жить всю жизнь вашего приложения - как статические переменные. Вы были бы в беде, если бы это был какой-то другой, короче Context
, но приложение Context
все должно быть в порядке.
Для справки о том, безопасно ли это делать: