Android Volley + Loader шаблон?
Мне понравилась структура Volley, но у меня все еще есть некоторые сомнения по этому поводу.
Например, как Volley соответствует шаблону Loader? Поскольку запросы обрабатываются асинхронно, вызов его на фоне не имеет большого смысла. С другой стороны, если мы проигнорируем шаблон Loader, мы отменим загрузку и перезагрузку необходимых ресурсов, это будет своего рода трата.
Как работает система Volley с загрузчиками в Android?
Ответы
Ответ 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).