Код: Выделить всё
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)
Но в контексте он дает мне значение 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
}
}
И это работает, но я не уверен, что это правильно способ использования шаблона Singleton в классе приложения.. а также IDE выдает предупреждение о переменной экземпляра:
Не размещайте классы контекста Android в статических поля (статическая
ссылка на CustomApplication, контекст поля которого указывает на
Context); это утечка памяти
Какой в настоящее время лучший способ доступа к классу приложения?
Подробнее здесь: https://stackoverflow.com/questions/786 ... s-nowadays
Мобильная версия