Каков правильный способ доступа к классу приложения в настоящее время?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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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