Методы загрузки данных в Async для Android

Если мне нужно асинхронно загружать некоторые данные через HTTP (или что-то еще), чтобы обновить пользовательский интерфейс, у меня есть несколько вариантов при написании приложения для Android (среди многих других, которые, я уверен, я пропустил):

  1. Используйте регулярный поток и обработчик для обновления пользовательского интерфейса.

  2. AsyncTask

  3. Use и IntentService и использовать либо обратный вызов, либо транслировать результаты через Intent.

  4. Использование погрузчиков .

Насколько я понимаю, IntentService не привязан к жизненному циклу Activity, поэтому любые изменения ориентации и т. Д. Не будут влиять на извлечение данных. Если это не относится к AsyncTask или потоку, запущенному внутри Activity.

Причина вопроса заключается в том, что я недавно прочитал о Loaders и смущен в отношении их приложения. Они, похоже, более тесно связаны с источником данных, где, если источник данных изменяется, тогда «прозрачно» все обрабатывается соответствующим образом. Похоже, что Loaders также терпимы к изменениям конфигурации / ориентации (я считаю).

В настоящее время я использую IntentService для вызова сервисов RESTful и трансляции результатов, которые будут получены соответствующими действиями.

Я предполагаю, что могу написать HTTP-загрузчик, но я не уверен, что это лучший способ использования этого механизма.

Каковы преимущества / недостатки использования одного из методов загрузки данных async над любым другим?

Solutions Collecting From Web of "Методы загрузки данных в Async для Android"

Все эти механизмы – это просто варианты. Нет такой вещи, как один размер, соответствующий всем инструментам, и поэтому все эти различные методы выполнения одной и той же задачи – это способ охватить как можно больше случаев использования.

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

  1. Регулярный поток и обработчик – Почему, когда есть другие, более простые варианты?

  2. AsyncTask. Поскольку AsyncTask почти всегда будет зависеть от Activity, используйте это, когда вам нужно загружать данные асинхронно, и вы на 100% уверены, сколько времени это займет. Пример: Выполнение SQLite-запроса.

  3. IntentService / Service – Сервисы не связаны с деятельностью, такой как AsyncTask, поэтому они идеально подходят для сценариев, в которых вы, возможно, не знаете, сколько времени потребуется для завершения. Пример. Загрузка данных из веб-API и обновление базы данных.

  4. Погрузчики – погрузчики предназначены для упрощения процесса загрузки данных и заполнения его в пользовательский интерфейс. Природа сортировщика Loaders предполагает, что данные, которые вы будете загружать, будут представлены пользователю в виде списка. Пример: загрузка данных и их заполнение в ListView