В андроиде статические переменные действительно ли использования являются методическими рекомендациями? Например, реализовывая Шаблон "одиночка" в Java, я обычно делаю:
private static A the_instance;
public static A getInstance() {
if (the_instance == null) {
the_instance = new A();
}
return the_instance;
}
Кроме того, когда это становится очищенным JVM Android?
Спасибо.
статические
поля присоединены к экземпляру Class
в целом, который, в свою очередь, присоединен к ClassLoader
, который загрузил класс. the_instance
будет выгружен, когда будет восстановлен весь ClassLoader
. Я на 90% уверен, что это происходит, когда Android уничтожает приложение (не когда оно уходит в фоновый режим или приостанавливается, а полностью закрывается).
Так что считайте это живым, пока работает ваше приложение. Синглтон - хорошая идея? У людей разные взгляды. Я считаю, что при правильном использовании это нормально. Я не думаю, что ответ сильно изменится на Android. Использование памяти не является проблемой само по себе; если вам нужно загрузить кучу вещей в память, это либо проблема, либо нет, независимо от того, инкапсулируете ли вы данные в синглтоне.
Я не уверен, подходит ли такой подход для мобильной платформы, где у вас ограниченный объем доступной памяти. Не говоря уже о том, что приложение будет запускаться на устройстве с поддержкой многозадачности.
Я думаю, что этот подход может занять память устройства, но у меня нет документа, подтверждающего это. Возможно, кто-нибудь более образованный, чем я, поделится своими мыслями.
Нет. Не делай этого! Синглтон - это антипатерн! . Вместо этого используйте внедрение зависимостей, будь то через фреймворк (например, через Dagger или Roboguice ) или путем явной передачи созданного объекта.