Существует два ключевых преимущества использования CursorLoader
в вашем приложении по сравнению с Activity.managedQuery():
- . Запрос обрабатывается в фоновом потоке для вас (из-за того, что он построен на
AsyncTaskLoader)
, поэтомуЗапросы больших данных не блокируют пользовательский интерфейс. Это то, что рекомендовано в документах для себя, когда вы используете простой Cursor
, но теперь это делается под капотом. CursorLoader
- это автоматическое обновление.В дополнение к выполнению начального запроса, CursorLoader регистрирует ContentObserver
с запрашиваемым набором данных и вызывает forceLoad()
при изменении набора данных. Это приводит к тому, что вы получаете обратные вызовы async
в любое время, когда данные изменяются для обновления данных.view.
Каждый экземпляр Loader также обрабатывается через единственное число LoaderManager
, поэтому вам по-прежнему не нужно управлять курсором напрямую, и теперь соединение может сохраняться даже после одного Activity. LoaderManager.initLoader()
и LoaderManager.restartLoader()
позволяют повторно подключиться к существующему загрузчику, уже настроенному для вашего запроса, и, в некоторых случаях, мгновенно получать последние данные, если они доступны.lable.
Ваша активность или фрагмент, вероятно, теперь будут реализовывать интерфейс LoaderManager
.Callback.Вызов initLoader()
приведет к методу onCreateLoader (), в котором вы создадите запрос и новый экземпляр CursorLoader
, если это необходимо.Метод onLoadFinished()
будет запускаться каждый раз, когда будут доступны новые данные, и будет включать в себя последний Курсор, который вы можете присоединить к представлению или иным образом выполнить итерацию.
Кроме того, есть довольно хороший пример всехэто примерка на странице документации класса LoaderManager
: http://developer.android.com/reference/android/app/LoaderManager.html
Надеюсь, что поможет!