Каков правильный способ доступа к классу приложения в настоящее время?Android

Форум для тех, кто программирует под Android
Anonymous
Каков правильный способ доступа к классу приложения в настоящее время?

Сообщение Anonymous »

В кодовых лабораториях современных разработчиков Android это показано следующим образом:

Код: Выделить всё

class CustomApplication: Application() {
lateinit var container: AppContainer
lateinit var context: Context

override fun onCreate() {
super.onCreate()
container = AppContainer()
context = applicationContext
}
}

fun CreationExtras.CustomApplication(): CustomApplication=
(this[ViewModelProvider.AndroidViewModelFactory.APPLICATION_KEY] as CustomApplication)
И получить доступ таким образом: CustomApplication().context
Но в контексте он дает мне значение null, потому что onCreate не создается позвонил почему-то. Другой разработчик Android сказал мне, что, по его мнению, код из кодовых лабораторий неправильный и что он создает новые экземпляры приложения каждый раз, когда вы его вызываете. Он сказал мне сделать это следующим образом:

Код: Выделить всё

class CustomApplication: Application() {
lateinit var container: AppContainer
lateinit var context: Context

override fun onCreate() {
super.onCreate()
instance = this
container = AppContainer()
context = applicationContext
}

companion object {
lateinit var instance: CustomApplication
}
}
И получить доступ таким образом: CustomApplication.instance.context
И это работает, но я не уверен, что это правильно способ использования шаблона Singleton в классе приложения.. а также IDE выдает предупреждение о переменной экземпляра:

Не размещайте классы контекста Android в статических поля (статическая
ссылка на CustomApplication, контекст поля которого указывает на
Context); это утечка памяти

Какой в ​​настоящее время лучший способ доступа к классу приложения?

Подробнее здесь: https://stackoverflow.com/questions/786 ... s-nowadays

Вернуться в «Android»