В чем преимущество загрузчиков через Asynctask в Android?

Есть ли преимущества Loaders над задачей Async? Также, как сделать загрузчики совместимыми для телефонов с Android froyo.

Изменить:

Основная проблема заключается в том, что я не использую собственный DB (SqlLite). Использование БД на сервере разработки. Очевидно, я больше не могу использовать CursorLoader. AsyncTaskLoader не имеет примеров. Если есть, пожалуйста, сделайте ссылку.

Лучше ли вы загружать данные, необходимые для локального БД, а затем запрашивать его с помощью CursorLoader?

Ответ 1

Да, погрузчики более выгодны, чем AsyncTask, поскольку они заботятся о многих вещах, которые AsyncTask не хватает, жалко.

  • Изменения в ориентации экрана в AsyncTask сложно. Раньше у меня была такая проблема, пока я не использовал класс Activity Control, который я использовал для сохранения при изменении конфигурации. Я могу дать вам код, если вы хотите знать, как это сделать. Однако приложение, используемое для сбоя, изменило время мультиплексирования ориентации даже до загрузки всех данных. Секрет здесь не загружает много данных с вашим первым потоком и как можно скорее завершает ваши задачи по потоку. Даже если это происходит в фоновом режиме, у Android есть потёртый способ борьбы с потоками. Вы никогда не знаете, когда одна из ваших задач будет убита.

  • Даже если вы используете AsyncTaskLoader, убедитесь, что вы используете диспетчер активности. Это поможет вам получить больше контроля над действиями и AsyncTask.

Да, он совместим со старой версией Android. Вам нужно включить библиотеку поддержки (в большинстве случаев это включено по умолчанию, но всегда приятно проверять дважды).

Ответ 2

Во-первых, загрузчики легче кодировать (они почти встроены во Фрагменты). Погрузчики (в частности, CursorLoader) также обрабатывают ваш курсор для вас (например, устаревший manageQuery).

Ознакомьтесь с этой ссылкой , чтобы прочитать, как использовать Loader pre-Honeycomb.

Ответ 3

Там проще реализовать и позаботиться о много управления жизненным циклом, который ранее должен был быть сделан "вручную" с помощью AsyncTasks. Подробнее см. В ответе на question.

Что касается использования их с Froyo, они доступны через библиотеку совместимости.

Ответ 4

Кажется, никто не говорит о недостатках погрузчиков! В настоящее время я работаю над системой, которая запускает другие службы в фоновом режиме.

Я заметил, что как только экран с загрузчиком возобновится. Курсор, используемый загрузчиком, блокирует БД.

Он может быть не открытым для большинства людей, но getDatabaseWriter из sqlite на самом деле является синхронизированным методом, и поэтому курсор, используемый загрузчиком, никогда не закрывается до тех пор, пока загрузчик не будет reset или не будет завершен, тем самым блокируя доступ к БД.

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

Ответ 5

Другим преимуществом погрузчиков является то, что они обрабатывают событие поворота экрана изящно, тогда как асинтеза может дать вам проблемы.

Ответ 6

Самый большой diff:

CursorLoader обновит содержимое вашего пользовательского интерфейса, как только его связанный ContentProvider изменит его содержимое (скажем, через Service), а AsyncTask обновит ваш интерфейс только после его передачи.