@Normanns

Глобальные данные приложения и их хранение при разработке под OS Android. Singleton, Service или ...?

У меня небольшой опыт разработки и если мои решения кажутся абсурдными, прошу не судить строго.
При написании веб-приложения под Android, у меня была необходимость использовать данные, поступающие при авторизации пользователя. Этих данных немного: 4-6 строк и интовый идентификатор, я решил что достаточно будет сохранить эти данные в памяти приложения и обращаться к ним при необходимости. Для этого мне пришла в голову мысль использовать паттерн синглтона.
Мне показалось разумным не писать собственный синглтон, а сделать обычный класс, описывающий модель приходящих данных, и хранить экземпляр этого класса в глобальной переменной наследника класса Application, к которому есть доступ из любой Activity приложения +, как мне тогда казалось, пока жив Application - жив и весь процесс. Но действительность повернулась к моим идеям филейной частью.
Попался мне пользователь девайса Samsung S3 на Android 4.3, у которого в бекграунде висит столько приложений, сколько не потянул был мой старенький лаптоп. Плюс у него установлен какой-то Clean Master, обещающий вычищать память телефона (как-будто Dalvik'у своего GC не хватает).
Словом, как многие уже догадались, объект, хранящий данные пользователя, у меня частенько обнулялся, что приводило к крешу приложения. Там же обнулялись у меня четырехпоточный ScheduledExecutorService, в котором я собирал потоки с запросами к серверу и некоторые другие объекты, необходимые на уровне внутренней логики. Немногим позднее я вычитал, что в качестве одного из паттернов для веб-приложений гугл рекомендует использовать UI - ContentProvider - Service. Я успел подумать о том, чтобы использовать "внутренний" сервис в пределах жизни приложения в качестве хранилища пользовательских данных, но так и не нашел ниодного указания на то, что в сервисе ссылки смогут жить дольше, чем в синглтоне. Вся эта прелюдия была нужна для того, чтобы дать вам, уважаемая аудитория хабра, понять чего я пытаюсь добиться, и в заключении вопрос:
Что лучше использовать для хранения глобальных данных в памяти приложения?
1) Синглтон
2) Сервис
3) Хранить данные локально и при необходимости дергать их из / записывать в базу ?
4) ..(другое)..
  • Вопрос задан
  • 5656 просмотров
Решения вопроса 2
@vovkab
Приложение может умереть в любой момент поэтому данные нужно где то сохранять.
Логика работы может выглядеть как то так:

Создается Application, в onCreate проверяете:
1) если данные есть SharedPreference, загружаем их от туда
2) если данных нет, загружаем с сервера и сохраняем в SharedPreference
Ответ написан
Комментировать
@AT547
Android developer
1 и 2 не подойдёт, т.к. приложение умирёт и данные потеряются.
3 - хороший вариант, но если данных для хранения мало, то не совсем подойдёт.
возможно в данном случае лучше воспользоваться SharedPreferences. данные, сохранённые в SharedPreferences будут жить пока приложение не удалят, либо пока не очистят данные приложения через настройки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы