gpt4 book ai didi

java - 为什么我必须在 onLoaderReset 中使用 swapCursor(null)?

转载 作者:行者123 更新时间:2023-11-30 08:51:12 25 4
gpt4 key购买 nike

Android 的文档 ( https://developer.android.com/guide/components/loaders.html ) 说当我使用加载程序进行 SQL 查询时,我应该在 onLoaderReset 方法中执行 swapCursor(null):

onLoaderReset This method is called when a previously created loader is being reset, thus making its data unavailable. This callback lets you find out when the data is about to be released so you can remove your reference to it.
This implementation calls swapCursor() with a value of 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 中将adapter 的cursor 切换为null。据我所知,加载器在 Activity 被销毁时被重置。但是当 Activity 被破坏时,它有资格进行垃圾收集,并且此 Activity 保留的所有引用也有资格进行垃圾收集。所以这些适配器中的任何一个都没有关系保留对游标的引用 - 它不会阻止游标被垃圾收集。

那么,为什么我应该在 onLoaderReset 中将适配器的光标交换为 null?

最佳答案

如果 Activity 的底层成员引用 Activity 之外的 Activity , Activity 将不会被垃圾回收。当它的所有成员将来都可能不被使用时,它将被垃圾收集。
if swapCursor(null); 将删除所有对游标的底层引用。否则它会创建一个 memory leak并且您的 Activity 不会被垃圾收集。

关于java - 为什么我必须在 onLoaderReset 中使用 swapCursor(null)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30666215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com