Задать вопрос
@WaterSmith
Android-разработчик. Java, Kotlin

Android. Как выбрать правильную архитектуру для приложения с http запросами?

Пишу приложение, которое получает с Web сервиса xml, и выводит его содержимое в ListView. Поскольку и java в целом, и Android в частности для меня новые вещи, приходится перерабатывать горы информации, часто устаревшей. С шаблонами проектирования тоже знаком очень поверхностно. Сейчас у меня все работает, но нет уверенности что я все делаю верно. Пожалуйста укажите что не так в моем решении, и какие шаблоны проектирования я использовал.

Мое приложение состоит из Application, Activity и Сервиса. Я начитался про то, как плохо использовать AsyncTask и поэтому решил использовать Сервисы.

Application в onCreate создает ServiceHelper и предоставляет к нему доступ. К Activity подключен интерфейс, слушатель ответа от сервиса. При нажатии кнопки в Activity, ServiceHelper создает интент и запускает сервис. Сервис после завершения работы отправляет результат работы через интерфейс ServiceCallbackListener в бандле.

Activity по событию onServiceCallback считывает результат из бандла.

Затем я понял, что в случае, когда Callback от сервиса приходит в остановленное приложение, то результат пропадает в никуда.

Для решения этой проблемы я сделал так, что сервис сохраняет в ServiceHelper бандл с результатом работы, а Activity, после обработки коллбека сообщает хелперу, что кэш можно очистить. Теперь у меня Activity, по событию onPostResume спрашивает у ServiceHelper, обрабатывает ли еще сервис запрос с указанным id, если нет, то нет ли для этого id данных, и если есть, грузит их в ListView и сообщает хелперу, что данные с таким то id нужно удалить.

Все хорошо, но эта реализация навеяна статьей, которой уже пять лет. Я слышал, что сейчас в Android используют Loaderы, ретрофит, rxJava, и много других страшных слов, отсюда возникли сомнения, не горожу ли я велосипеды там, где надо использовать готовые объекты?
  • Вопрос задан
  • 502 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
evgstrannik
@evgstrannik
Java, Android, UI/UX
Мой совет - не гонитесь за "хипстерскими" новыми веяниями. Если механизм работает, работает хорошо и покрывает все ваши потребности - значит все ок. Это в общем-то касается и AsyncTask-ов.
Я лично у себя обошелся стандартными AsyncTask, а кэш результатов хранил в виде json на файловой системе. Пусть не суперсовременно, зато работает, работает быстро и прозрачно.
Ответ написан
Комментировать
gadfi
@gadfi
https://gamega.org
с одной стороны я соглашусь с Евгений, если android не ваша основная специализация и проект не нужно расширять, то не переживайте, если же хотите сделать android основной специализацией, то да, вы городите велики, которые сегодня никому не нужны
в таком случае вам придется разобраться со всеми этими страшными словами, судя по всему вы с гуглом знакомы поэтому не буду вам их дублировать просто напомню
шо занадто то нездраво

читайте, пробуйте, но не внедряйте больше одной новой технологии за раз, старайтесь следовать принципам SOLID и пусть без кружевной архитектуры, но ваше приложение будет вполне бодро работать. Не знаете как сделать хорошо, сделайте в лоб, просто помните про здравый смысл.
новые технологии, изящные архитектурные решения придут с опытом.
побольше читайте, смотрите чужой код.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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