Пишу приложение, которое получает с 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, и много других страшных слов, отсюда возникли сомнения, не горожу ли я велосипеды там, где надо использовать готовые объекты?