Android的文档(https://developer.android.com/guide/components/loaders.html)说当我使用加载器进行SQL查询时,我 应该在onLoaderReset方法中执行swapCursor(null):
onLoaderReset 当重置先前创建的加载器时调用此方法,从而使其数据不可用。此回调可让您找出数据即将发布的时间,以便您可以删除对它的引用 此实现调用swapCursor()的值为null:
// 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中将适配器的光标交换为null。据我所知,当活动被破坏时,加载器被重置。但是当活动被破坏时 它有资格进行垃圾收集,此活动保留的所有引用也符合垃圾回收的条件。因此,如果这些适配器中的任何适配器都无关紧要 保持对光标的引用 - 它不会阻止光标被垃圾收集。
那么,为什么我要在onLoaderReset中将适配器的光标交换为null?
答案 0 :(得分:2)
如果其基础成员引用活动的一侧,则不会对活动进行垃圾回收。当所有成员未来可能不会被使用时,它将被垃圾收集。
如果swapCursor(null);
将使用游标删除所有底层引用。否则它将创建memory leak并且您的活动不会被垃圾收集。