Подтвердить что ты не робот

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

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

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

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

Спасибо!

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

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

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

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

Ответ 4

Различия в CursorLoader и AsyncTaskLoader равны

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