У меня есть приложение для Android, в котором у меня есть система входа в систему и некоторые другие вещи, которые взаимодействуют с сервером. Иногда я просто получаю от веб-сервера только подтверждение, а иногда я получаю много данных. До сих пор я использовал простую базу данных. Сегодня я реализовал Content Provider, который работает до сих пор. Чтобы получить данные от ContentProvider, я использовал этот Cursor cursor = getContentResolver().query();
, но я увидел, что есть также возможность использовать CursorLoader. В чем разница между ними? Что в моем случае использовать? Я также видел, что я должен реализовать его в каждом классе cursorLoader, не могу ли я создать для него один класс и вызывать его, когда это необходимо?
Должен ли я использовать Cursor или CursorLoader?
Ответы (1)
Как указано в документации,
CursorLoader реализует протокол Loader стандартным способом для запроса курсоров, опираясь на AsyncTaskLoader для выполнения запроса курсора в фоновом потоке, чтобы он не блокировал пользовательский интерфейс приложения.
Это самое большое преимущество использования загрузчиков, т. е. асинхронность. Некоторые другие важные преимущества также упоминаются здесь.
- Они обеспечивают асинхронную загрузку данных.
- Они отслеживают источник своих данных и предоставляют новые результаты при изменении содержимого.
- Они автоматически переподключаются к последнему курсору загрузчика при воссоздании после изменения конфигурации. Таким образом, им не нужно повторно запрашивать свои данные.
Если вы используете курсоры по умолчанию, запрашивая контент-провайдер напрямую, вам нужно обрабатывать их закрытие, и, как вы сказали, у вас огромные данные, вам придется запускать код запроса в другом потоке. Для всех этих целей использование CursorLoaders намного проще и эффективнее. Чтобы узнать, как его использовать, ознакомьтесь с этим.
Что касается вашего второго вопроса,
Я также видел, что я должен реализовать его в каждом классе cursorLoader, не могу ли я создать для него один класс и вызывать его, когда это необходимо?
Вы вполне можете создать базовый класс, который будет реализовывать обратные вызовы загрузчика, а затем вы можете наследовать этот базовый класс от всех классов, которым необходимо использовать CursorLoaders.