2014-12-19 3 views
3

Это может показаться глупым вопросом, но я не могу окутать голову в состояние AsynctaskLoader.Состояние перезагрузки AsynctaskLoader

Я читал документацию несколько раз, а также другие учебники в Интернете. Тем не менее, я все еще не могу понять, когда Asynctask находится в состоянии Reset

Посмотрите этот бит кода, извлеченный из официальной документации. http://developer.android.com/reference/android/content/AsyncTaskLoader.html

@Override public void deliverResult(List<AppEntry> apps) { 
    if (isReset()) { 
     // An async query came in while the loader is stopped. We 
     // don't need the result. 
     if (apps != null) { 
      onReleaseResources(apps); 
     } 
    } 

Этот метод называется то Loader делается с его работой и необходимо отправить данные обратно в поток пользовательского интерфейса. Мой вопрос: почему мы спрашиваем, перезагружен ли Loader ?. Что это значит для его сброса? Класс говорит

/** 
* Return whether this load has been reset. That is, either the loader 
* has not yet been started for the first time, or its {@link #reset()} 
* has been called. 
*/ 

Можно подумать, что если бы не был запущен загрузчик в первый раз, это было бы в остановленном заявил, почему перезапущен ?.

Я думаю, я не совсем понимаю, как загрузчик реагирует на жизненный цикл активности, но в документации ничего не говорится об этом.

ответ

2

«Тем не менее, я до сих пор не могу понять, когда AsyncTask находится в Reset государства»

Я считаю, что ты имел в виду «... когда ПОГРУЗЧИК находится в состоянии покоя»

Обычно можно было бы использовать LoaerManager для управления жизненным циклом погрузчиков.

Когда пользователь вызывает LoaderManager # destroyLoader(), LoadManager удаляет этот загрузчик из его кеша. Загрузчик также может быть уничтожен при вызове LoaderManager # restartLoader() или когда Activity/Fragment проходит через фазу уничтожения. Если такой загрузчик ранее доставлял данные клиенту (обычно Fragment или Activity), тогда LoaderManager будет вызывать onLoaderReset() и инструктирует загрузчик выполнить сброс. Это дает клиенту возможность удалить любые ссылки на данные и загрузчик освободить любые ресурсы, связанные с данными. Помните, что владельцем данных является загрузчик, а не клиент.

«Мой вопрос: почему мы спрашиваем, перезагружен ли погрузчик?»

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

«Что это означает для его сброса?»

Загрузчик в состоянии сброса должен остановить все свои операции, так как он может быть уничтожен вскоре после этого. В частности, он должен освобождать любые ресурсы, занятые предыдущими загруженными данными, прекратить загрузку новых данных и мониторинг изменений в источнике данных подчеркивания.

«Вы могли бы подумать, что если загрузчик не был запущен в первый раз, это было бы в заявлении STOPPED, почему он перезапустился?».

Остановленное состояние указывает, что загрузчик ранее находился в начальном состоянии. В состоянии остановки загрузчик может иметь ранее загруженные данные и следить за изменениями в источнике данных подчеркивания. В выключенном состоянии загрузчик может вернуться в исходное состояние или сбросить состояние. Если он перезагружен, он может использовать свои предыдущие загруженные данные, если никаких изменений в источнике данных не было, пока он был остановлен.

Когда загрузчик создан, но до его запуска, он считается в состоянии сброса. Это хорошо работает, потому что в этом состоянии еще нет загруженных данных, а также загрузчик не должен выполнять какие-либо операции, как указано выше.

3

I think this will help you

Думаю, это поможет вам. Эта карта показывает как жизненный цикл и жизненный цикл погрузчика, так и жизненный цикл погрузчика.

Смежные вопросы