Разница между CursorLoader и AsyncTaskLoader

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

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

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

Спасибо!

Solutions Collecting From Web of "Разница между CursorLoader и AsyncTaskLoader"

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

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

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

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

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

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

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

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

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

Различия в CursorLoader и AsyncTaskLoader

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