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

4 ответа:

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

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

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

вот что говорит Android doc:

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

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

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

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

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

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

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