2013-08-26 2 views
0

В обработчике кликов для кнопки я загружаю некоторые данные у поставщика контента (используя getContentResolver().query(...)), а затем отправляя эти данные по сетевому запросу. Так как запрос происходит в основном потоке с этим подходом, я хочу переместить это из основного потока пользовательского интерфейса.Одиночный загрузчик

Я думаю, что могу использовать LoaderManager и отключить сетевой запрос в onLoadFinished(), но проблема в том, что я не хочу, чтобы onLoadFinished() вызывал снова (для этого идентификатора Loader), потому что я не хочу запускать сетевой запрос снова, во время ориентации экрана, например.

Итак, как я могу использовать LoaderManager для запроса, который я хочу сделать только один раз?

ответ

0

Вызов LoaderManager#initLoader() в вашем Activity#onCreate() метода либо создать новый Loader и заставить новую нагрузку, или повторно использовать существующую Loader и доставить наиболее недавно запрашиваемые данные, если таковые существует. Поэтому, пока вы правильно используете LoaderManager (то есть, как рекомендует сайт разработчика в документации), у вас не должно быть никаких проблем.

+0

Проблема в том, что мне нужен только результат запроса один раз, но с помощью LoaderManager я возвращаю результат несколько раз (при повороте на экране или повторное создание активности и т. Д.). –

0

В вашем onLoadFinished() вы можете позвонить по телефону getLoaderManager().destroyLoader(loaderId) (или getSupportLoaderManager(), если применимо). Это остановит загрузчик от автоматической перезагрузки. Вам также может потребоваться убедиться, что там, где вы звоните, initLoader защищен от повторного запуска (например, путем сохранения булевой переменной в onSaveInstanceState).