Рекомендуется ли использовать статические переменные в Android? Например, при реализации одноэлементного шаблона в Java я обычно делаю:
privatestatic A the_instance; publicstatic A getInstance() { if (the_instance == null) { the_instance = newA(); } return the_instance; }
Кроме того, когда это будет очищено Android JVM?
Переведено автоматически
Ответ 1
static поля привязаны к Class экземпляру в целом, который, в свою очередь, привязан к ClassLoader который загрузил класс. the_instance будет выгружен, когда весь ClassLoader будет восстановлен. Я на 90% уверен, что это происходит, когда Android уничтожает приложение (не когда оно переходит в фоновый режим или приостанавливается, а полностью выключается).)
Итак, считайте, что это работает до тех пор, пока работает ваше приложение. Синглтон - хорошая идея? У людей разные взгляды. Лично я думаю, что это нормально, когда используется надлежащим образом. Я не думаю, что ответ сильно изменится на Android. Использование памяти само по себе проблемой не является; если вам нужно загрузить кучу вещей в память, это либо проблема, либо нет, независимо от того, инкапсулируете ли вы данные в Singleton.
Ответ 2
Я думаю, что статические переменные - это нормально.
Как мне передавать данные между действиями / Службами в рамках одного приложения?
Общедоступное статическое поле / метод
Альтернативный способ сделать данные доступными для различных действий / служб - это использовать общедоступные статические поля и / или методы. Вы можете получить доступ к этим статическим полям из любого другого класса вашего приложения. Чтобы предоставить общий доступ к объекту, действие, создающее ваш объект, устанавливает статическое поле, указывающее на этот объект, и любое другое действие, которое хочет использовать этот объект, просто обращается к этому статическому полю.
Ответ 3
Вопреки тому, что говорят другие люди - это более чем нормально. Конечно, в нем есть некоторая структура. В официальном репозитории googlesamples / android-architecture он используется в todo-mvp-clean (приложение Todo, реализующее шаблон MVP и следующее принципам чистой архитектуры). Ознакомьтесь с этим файлом.
Что вы можете видеть, так это множество статических методов, ссылающихся на одноэлементные геттеры.
Современной, менее подверженной ошибкам и удобной альтернативой является Dagger DI framework.
Ответ 4
Я не уверен, подходит ли такой подход для мобильной платформы, где у вас ограниченная доступная память. Не говоря уже о том, что приложение будет запущено на устройстве с поддержкой многозадачности.
Я думаю, что такой подход может отнимать память у устройства, но у меня нет документа, подтверждающего это. Возможно, кто-то более образованный, чем я, может поделиться своими мыслями.