18

Почему я должен использовать AsyncTaskLoader, и когда я должен предпочесть CursorLoader и наоборот?разница между CursorLoader и AsyncTaskLoader

В официальном page показан пример приложения, который использует AsyncTaskLoader вместо CursorLoader.

Каковы преимущества и недостатки этих двух? Я где-то читал о CursorLoader, не заботясь о смене контента (в sqlite).

Спасибо!

ответ

23

AsyncTaskLoader представляет собой абстрактный загрузчик, который предоставляет AsyncTask для выполнения работы. Поэтому вы обычно расширяете AsyncTaskLoader, чтобы создать свой собственный пользовательский загрузчик. Основное различие между использованием AsyncTask и использованием AsyncTaskloader заключается в том, что изменения конфигурации (например, изменение ориентации) не влияют на AsyncTaskLoader и его процессы, так как AsyncTaskLoader имеет собственный жизненный цикл, а изменения конфигурации влияют на AsyncTask неблагоприятно, так как он связан с жизненным циклом активности хоста.

CursorLoader - это загрузчик, который запрашивает ContentResolver и возвращает Cursor. Этот класс реализует протокол Loader стандартным способом запроса курсоров. Это не что иное, как AsyncTaskLoader.

Одним словом, вы можете использовать AsyncTaskLoader, когда вам нужно создать пользовательский загрузчик, расширив AsyncTaskLoader < D> где D = "anything_you_want_to_load". И вы используете CursorLoader, когда вам нужно реализовать загрузчика, который загружает курсор (обычно используется, когда вы загружаете данные из базы данных).

1

AsyncTaskLoader - это один из подклассов Loaders, представляющий интерес. Этот класс выполняет ту же функцию, что и AsyncTask, но немного лучше. Есть несколько вопросов, с использованием AsyncTasks, хотя:

изменения конфигурации могут натворить Приостановка деятельности не устанавливается на паузу AsyncTask изрядное количество шаблонного кода (что означает больше возможных ошибок)

Он легче справляется с изменениями конфигурации деятельности и ведет себя в жизненных циклах фрагментов и действий. Приятно, что AsyncTaskLoader можно использовать в любой ситуации, в которой используется AsyncTask. В любое время данные должны загружаться в память для Activity/Fragment для обработки, AsyncTaskLoader может выполнять работу лучше.

Красота Погрузчика заключается в том, что он обрабатывает некоторые «gotchas», которые обычно пропускаются при использовании AsyncTask. В основном, он обрабатывает изменения конфигурации активности (IE, когда пользователь поворачивает экран).

С другой стороны, CursorLoader действительно светит при использовании курсоров в Android для извлечения данных. Класс Loader отлично справляется с обновлением информации курсора (и, в свою очередь, пользовательского интерфейса) всякий раз, когда базовые данные изменяются. Это очень полезно, когда информация часто меняется, и вы не хотите прервать пользовательский интерфейс и что бы ни делал пользователь, просто чтобы отобразить некоторую новую информацию.

+0

Ожидание подтверждения кем-либо – Nabin

0

Различия в CursorLoader и AsyncTaskLoader являются

  • AsyncTaskLoader можно использовать для возврата пользовательских объектов, но CursorLoader возвращает только Cursor
  • CursorLoader может получить getContext().getContentResolver().notifyChange(uri, null); но AsyncTaskLoader не получает.
4

Следует отметить, что CursorLoader представляет собой конкретную реализацию AsyncTaskLoader<D>. В принципе, CursorLoader можно охарактеризовать как AsyncTaskLoader, специально предназначенный для обработки Cursor объектов.

Смежные вопросы