Использование статических переменных в 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?
спасибо.
4 ответа:
static
поля присоединяются кClass
экземпляр в целом, который в свою очередь прикреплен кClassLoader
, который загрузил класс.the_instance
будет выгружен, когда весьClassLoader
исправляется. Я на 90% уверен, что это происходит, когда Android уничтожает приложение (не тогда, когда оно переходит в фоновый режим или приостанавливается, но полностью отключается.)Итак, думайте об этом как о жизни, пока ваше приложение работает. Синглтон-хорошая идея? У людей разные взгляды. Я думаю, что это нормально, когда используется соответственно, я сам. Я не думаю, что ответ сильно меняется на Android. Использование памяти не является проблемой как таковой; если вам нужно загрузить кучу вещей в память, это либо проблема, либо нет, независимо от того, инкапсулируете ли Вы данные в Синглтон.
Я думаю, что статические переменные в порядке.
вот что говорит Android doc:
http://developer.android.com/guide/appendix/faq/framework.html
Как передать данные между действиями / службами в одном приложении?
публичное статическое поле / метод
альтернативным способом сделать данные доступными для различных видов деятельности / услуг является использование общедоступных статических полей и/или методов. Вы можете получить доступ к этим статическим полям из любой другой класс в вашем приложении. Чтобы совместно использовать объект, действие, которое создает ваш объект, устанавливает статическое поле для указания на этот объект, а любое другое действие, которое хочет использовать этот объект, просто обращается к этому статическому полю.
Я не уверен, что такой подход хорош для мобильной платформы, где у вас есть ограниченное памяти для вас. Не говоря уже о том, что приложение будет работать на многозадачность устройства.
Я думаю, что этот подход может Хог памяти от устройства, но у меня нет документа, чтобы поддержать это. Возможно, кто-то более образованный, чем я могу поделиться своими мыслями.
нет. Не делай этого! Синглтон-это анти-патерн!. Вместо этого используйте инъекцию зависимостей, будь то через фреймворк (например, через Кинжал или Roboguice) или путем явной передачи экземпляра объекта.