В чем преимущество загрузчиков перед Asynctask в Android? - PullRequest
11 голосов
/ 31 января 2012

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

Редактировать:

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

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

Ответы [ 6 ]

10 голосов
/ 31 марта 2012

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

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

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

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

1 голос
/ 28 января 2014

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

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

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

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

1 голос
/ 31 января 2012

Там проще реализовать и позаботиться о многих элементах управления жизненным циклом, которые ранее приходилось выполнять «вручную» с помощью AsyncTasks. Подробнее см. Ответ на этот вопрос .

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

1 голос
/ 31 января 2012

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

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

0 голосов
/ 21 октября 2013

Наибольшая разница:

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

0 голосов
/ 31 января 2012

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

...