Использование статических переменных в Android

В android используются статические переменные, рекомендуемые? Например, реализуя шаблон Singleton в Java, я обычно делаю:

private static A the_instance; public static A getInstance() { if (the_instance == null) { the_instance = new A(); } return the_instance; } 

Кроме того, когда это очищается от Android JVM?

Спасибо.

static поля присоединяются к экземпляру Class в целом, который, в свою очередь, привязан к ClassLoader который загружал class. the_instance будет выгружен, когда весь ClassLoader будет исправлен. Я на 90% уверен, что это происходит, когда Android уничтожает приложение (а не когда он переходит в фоновый режим или приостанавливается, но полностью отключается).

Итак, подумайте об этом как о жизни, пока ваше приложение работает. Является ли Синглтон хорошей идеей? У людей разные взгляды. Я думаю, что это нормально, если использовать его соответствующим образом. Я не думаю, что ответ сильно изменится на Android. Использование памяти не является проблемой сама по себе; если вам нужно загрузить кучу материала в память, это либо проблема, либо ее нет, независимо от того, инкапсулируете ли вы данные в Singleton.

Я думаю, что статические переменные в порядке.

Это то, что говорит Android:

http://developer.android.com/guide/appendix/faq/framework.html

Как передавать данные между мероприятиями / услугами в одном приложении?

Публичное статическое поле / метод

Альтернативный способ сделать данные доступными через «Деятельность / Сервисы» – использовать общедоступные статические поля и / или методы. Вы можете получить доступ к этим статическим полям из любого другого classа вашего приложения. Чтобы совместно использовать объект, действие, которое создает ваш объект, устанавливает статическое поле, указывающее на этот объект, и любое другое действие, которое хочет использовать этот объект, просто обращается к этому статическому полю.

Я не уверен, что такой подход подходит для мобильной платформы, где у вас ограниченная память. Не говоря уже о том, что приложение будет запускаться на устройстве с несколькими задачами.

Я думаю, что этот подход может зависеть от памяти, но у меня нет документа для поддержки этого. Возможно, кто-то, кто более образован, чем я, может поделиться своими мыслями.

Нет. Не делай этого! Синглтон – антипатер! , Вместо этого используйте инъекцию зависимостей, будь то через фреймворк (например, через Dagger или Roboguice ) или явно передавая экземпляр объекта.

  • шифрование / дешифрование в Android с помощью AES
  • Почему окончательная переменная должна быть инициализирована до завершения конструктора?
  • Java: как получить входные данные из System.console ()
  • Android - ImageLoader должен быть init с настройкой перед использованием в UIL
  • Установка значения свойства Singleton в Firebase Listener
  • Заменить все вхождения строки с помощью StringBuilder?
  • Проект Android Studio Gradle «Невозможно запустить процесс / инициализацию виртуальной машины»
  • Android Microsoft Office Library (.doc, .docx, .xls, .ppt и т. Д.)
  • Java Runtime.exec ()
  • android.util.AndroidRuntimeException: requestFeature () необходимо вызвать перед добавлением содержимого
  • Как поддерживать несколько версий Android в коде?
  • Давайте будем гением компьютера.