Использование статических переменных в 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?

Спасибо.

Solutions Collecting From Web of "Использование статических переменных в Android"

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

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

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

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

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

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

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

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

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

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

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