Утечка памяти в сопутствующих объектах 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 все должно быть в порядке.

Для справки о том, безопасно ли это делать:

Другие вопросы по тегам