2

Андроида (https://developer.android.com/guide/components/loaders.html) говорит, что, когда я использую загрузчик делать запросы SQL, я должен делать swapCursor (нуль) в методе onLoaderReset:Почему у меня есть swapCursor (null) в onLoaderReset? документация

onLoaderReset Этот метод вызывается, когда ранее созданный загрузчик сбрасывается , что делает его данные недоступными. Этот обратный вызов позволяет узнать, когда данные будут выпущены, чтобы вы могли удалить свою ссылку на него.
Эта реализация вызывает swapCursor() со значением нуль:

// This is the Adapter being used to display the list's data. 
SimpleCursorAdapter mAdapter; 
... 
public void onLoaderReset(Loader<Cursor> loader) { 
    // This is called when the last Cursor provided to onLoadFinished() 
    // above is about to be closed. We need to make sure we are no 
    // longer using it. 
    mAdapter.swapCursor(null); 
} 

Я не понимаю, почему я должен поменять курсор адаптера на нуль в onLoaderReset. Насколько я знаю, загрузчик сбрасывается при уничтожении активности. Но когда активность разрушена, имеет право на сбор мусора, и все ссылки, которые эта деятельность сохраняет, также имеют право на сбор мусора. Поэтому не имеет значения, имеет ли какой-либо из этих адаптеров e-ссылку на курсор - это не помешает отображению мусора.

Итак, почему я должен менять курсор адаптера на нуль в onLoaderReset?

ответ

2

Деятельность не будет собираться мусором, если ее основные члены ссылаются на сторону деятельности. Это будет сбор мусора, когда все его члены могут не использоваться в будущем.
, если swapCursor(null); удалит все базовые ссылки с помощью курсора. в противном случае он создаст memory leak, и ваша деятельность не получит сбор мусора.

+1

Я думаю, что это предложение неверно: «Действия не будут собираться мусором, если его основные члены ссылаются на сторону деятельности». Я думаю, что верно только противоположное: действия не будут собираться мусором, если они ссылаются извне активности – user983447

+0

. Я не получаю никаких отличий от вышеуказанных двух предложений. – Kartheek

+0

Это разница между ссылкой и ссылкой. – user983447

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