андроид синглтон против статических методов - PullRequest
2 голосов
/ 13 июля 2011

Мне нужно загрузить некоторые файлы и сохранить их в статической переменной.

Методы загрузки и получения требуются почти во всех видах деятельности.

Я собирался сделать методы статичными, но некоторым блоггерам это не понравилось.

Основные преимущества инедостатки для обоих подходов для меня следующие:

singleton

преимущества: способность сохранять полиморфизм.

недостатки: необходимо вызывать методы getInstantace вкаждое действие.

статический метод - наоборот.

Пожалуйста, помогите мне выбрать между двумя или любым другим подходом.

Любая помощь будетбыть оцененным.

Ответы [ 4 ]

9 голосов
/ 13 июля 2011

Я бы не стал использовать статические переменные в Android, потому что Android часто удаляет все статические данные из вашего класса, если ваше приложение приостановлено, а у телефона недостаточно ресурсов, что приводит к неожиданным исключениям нулевого указателя. Поищите в Google «Android Static Null», чтобы лучше объяснить.

В любом случае (статические методы или Singletons) вы должны убедиться, что ваше приложение имеет возможность сохранять состояние и восстанавливать его в случае, если Android очищает ваши статические переменные.

7 голосов
/ 13 июля 2011

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

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

Единственный разумный аргумент против использования статических методов, с которым я столкнулсяв том, что статические методы проблематичны для макета в целях юнит-тестирования.Но я предполагаю, что вы, вероятно, не проводите фиктивное модульное тестирование, и я думаю, что ценность тестирования с фиктивными объектами, как правило, завышена, когда вы смотрите на значение, которое получается из этого, относительно объема работы, которая идет на настройкутестовый набор (ы).

2 голосов
/ 13 июля 2011

Правильным способом будет использование внедрения зависимостей. Здесь есть вопрос здесь , в котором обсуждаются ваши альтернативы.

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

1 голос
/ 13 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...