Ответ 1
В реальности вы, вероятно, захотите использовать сетевую библиотеку, например Volley. Это имеет некоторые приятные функции, такие как пакетная обработка запросов и кэширование изображений. Тем не менее, ради аргумента можно сравнить Service
, Loader
и AsyncTask
.
Службы - это путь, если вы хотите, чтобы загрузка продолжалась при изменении действий или фоновых приложений. Или, если вы хотите экспортировать свою услугу, чтобы использовать ее несколько приложений. В противном случае используйте Loader или AsyncTaskLoader.
Погрузчики имеют несколько преимуществ перед AsyncTasks.
- Они с меньшей вероятностью могут вызывать сбои, выполняя код после завершения Activity, поскольку они знают о жизненном цикле android.
- Проект не рекомендует ссылаться на
View
или Activities. Это уменьшает вероятность принуждения активности оставаться в памяти после того, как она уже завершена. - Отслеживать источник данных для изменений и запускать обратные вызовы при их возникновении.
- У них встроено кэширование, которое может быть полезно после поворотов. Для
Cursor
sCursorLoader
автоматически восстанавливается в правильном положении до последнего загруженного курсора.
Однако они также имеют недостатки
- API чрезвычайно громоздкий, чем
AsyncTask
. Особенно, если вам нужна совместимость со старыми версиями Android. - Вы уже сохраняете состояние пользовательского интерфейса внутри onSaveInstanceState(), поэтому использование
Loader
заставляет вас сохранять состояние несколькими способами. Это может ввести в заблуждение чтение и понимание. Особенно, если вы закончите перемешивание оставшихся фрагментов в миксе. -
Loader
кэширует загруженный результат, а не состояние пользовательского интерфейса, которое вам действительно нужно
Я предполагаю, что вы просто читаете веб-сервисы, а не пишете. Если вы выполняете обновления веб-службы, и вам нужно увидеть ответ службы, это изменит ситуацию. Использование AsyncTask
может помешать вам получить ответ, если он получен во время вращения.