Кто-нибудь знает, почему LoaderManager был исключен из Службы?
Как указано в другом ответе, LoaderManager
был явно разработан для управления Loaders
в течение жизненных циклов Acivities
и Fragments
.Так как Services
не имеет этих изменений конфигурации, использовать LoaderManager
не нужно.
Если нет, есть ли способ обойти это?
Да, уловка в том, что вам не нужно использовать LoaderManager
, вы можете просто работать с Loader
напрямую, который будет обрабатывать асинхронную загрузку ваших данных и отслеживать любые изменения, лежащие в основе ваших данных, что намного лучше, чемзапрашивая данные вручную.
Сначала создайте, зарегистрируйте и начните загрузку Loader
при создании Service
.
@Override
public void onCreate() {
mCursorLoader = new CursorLoader(context, contentUri, projection, selection, selectionArgs, orderBy);
mCursorLoader.registerListener(LOADER_ID_NETWORK, this);
mCursorLoader.startLoading();
}
Далее внедрите OnLoadCompleteListener<Cursor>
в свой Service
для обработки обратных вызовов.
@Override
public void onLoadComplete(Loader<Cursor> loader, Cursor data) {
// Bind data to UI, etc
}
Наконец, не забудьте очистить Loader
, когда Service
уничтожен.
@Override
public void onDestroy() {
// Stop the cursor loader
if (mCursorLoader != null) {
mCursorLoader.unregisterListener(this);
mCursorLoader.cancelLoad();
mCursorLoader.stopLoading();
}
}