Подтвердить что ты не робот

Android Volley + Loader шаблон?

Мне понравилась структура Volley, но у меня все еще есть некоторые сомнения по этому поводу.

Например, как Volley соответствует шаблону Loader? Поскольку запросы обрабатываются асинхронно, вызов его на фоне не имеет большого смысла. С другой стороны, если мы проигнорируем шаблон Loader, мы отменим загрузку и перезагрузку необходимых ресурсов, это будет своего рода трата.

Как работает система Volley с загрузчиками в Android?

4b9b3361

Ответ 1

A Loader может инкапсулировать практически все, включая запросы Volley. Когда ваш загрузчик инкапсулирует фреймворк, который уже обрабатывает фоновые работы для вас и возвращает вас в основной поток, например Volley, ваша реализация загрузчика не должна наследоваться от AsyncTaskLoader, а просто из базового класса Loader. Затем вы запускаете запрос Volley в методе onForceLoad().

Когда ваш загрузчик возвращает результат в основной поток через обратный вызов, ему просто нужно нажать его в Activity/Fragment, вызвав deliverResult().

Ваш загрузчик также должен будет поддерживать ссылку на запрос Volley, чтобы иметь возможность отменить его в onStopLoading(). onStopLoading() не вызывается в случае изменения конфигурации, как поворот экрана, только при выходе из Activity.

Единственный недостаток заключается в том, что Loaders не имеют встроенного механизма для распространения ошибок, в то время как Volley. Таким образом, в вашем обратном вызове ошибки Volley внутри вашего загрузчика вам нужно либо доставить нулевой результат, либо отправить локальную широковещательную рассылку, чтобы уведомить об активности/фрагменте ошибки.

Ответ 2

AFAIK и я видел в источниках, ответы на ваши запросы будут кэшироваться, IF сервер отправляет правильное кэширование headers (ETag), а во второй раз вы попытаетесь сделать a GET, к тому же URL-адресу вам будет предоставлен ответ от cache вместо повторного вызова Network (по умолчанию Volley кэширует запросы, используя key URL).

Добавление Requests в RequestQueue должно выполняться из MainThread, так как нет смысла называть их из фона Thread.

Ответ 3

Я только что опубликовал статью о Volley и ее интеграцию в проект поверх шаблона Loader. Показан расширенный подход. Состояние загрузчика полностью определено и отображается на диаграмме.

Статья: https://plus.google.com/117981280628062796190/posts/8b9RmQvxudb

Loader States Diagram

Ответ 4

С помощью класса RequestFuture можно выполнять синхронные запросы с помощью Volley. Я не рассматривал это лично, но похоже, что вы могли бы использовать это с помощью Loader, чтобы получить лучшее из обоих миров (Volley Cache с устойчивостью загрузки Loader).