为什么我必须在onLoaderReset中交换swapCursor(null)?

用户名

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

onLoaderReset当重置先前创建的加载器,从而使其数据不可用时,将调用此方法。通过此回调,您可以确定何时发布数据,以便删除对数据的引用。
此实现调用值为null的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中将适配器的游标交换为null。据我所知,当活动被破坏时,加载程序会重置。但是,如果活动被销毁,则可以进行垃圾收集,并且该活动保留的所有引用也可以进行垃圾收集。因此,不管这些适配器中的任何一个是否保持对游标的引用-都不会阻止游标被垃圾回收。

那么,为什么要在onLoaderReset中将适配器的游标交换为null?

卡特耶克

如果活动的基础成员引用了活动的外部,则不会将其收集为垃圾。当将来可能不再使用其所有成员时,将对其进行垃圾收集。
ifswapCursor(null);将使用光标删除所有基础引用。否则会造成内存泄漏,并且您的活动将不会被垃圾收集。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我必须在onLoaderReset中交换swapCursor(null)?

来自分类Dev

为什么我必须在客户端库中公开宏实现的“使用”?

来自分类Dev

为什么我必须在React的匿名函数中包装onClick属性的函数?

来自分类Dev

为什么我必须在onCreateView中返回视图而不是直接设置视图?

来自分类Dev

为什么我必须在此代码中添加一个新变量

来自分类Dev

为什么我们必须在Java脚本(Razor)中对C#代码使用引号

来自分类Dev

为什么我必须在ActionScript Project中手动添加Flex库

来自分类Dev

为什么我必须在Windows 10中的所有命令后都键入.exe?

来自分类Dev

为什么我们必须在代码中本地化$ /?

来自分类Dev

JavaScript:为什么我必须在表中单击两次以执行colorActiveLine函数?

来自分类Dev

为什么我必须在fold中写下匿名函数的返回类型

来自分类Dev

2 维数组。为什么我必须在 C 中声明列的大小

来自分类Dev

为什么我必须在jQuery查询后使用[0]

来自分类Dev

为什么我必须在mongoDB查询中使用+

来自分类Dev

为什么我必须在数据加载之前点击?

来自分类Dev

为什么我必须在数据加载之前点击?

来自分类Dev

为什么必须在onChanged(在Flutter中)中调用didChange?

来自分类Dev

为什么必须在C ++类定义中声明方法?

来自分类Dev

为什么必须在最终声明中声明列表

来自分类Dev

为什么必须在子类中重新声明PoolDictionaries?

来自分类Dev

为什么必须在onCreate中初始化对象?

来自分类Dev

为什么必须在类中调用_internal()?

来自分类Dev

为什么方法varargs必须在Java的单独块中?

来自分类Dev

为什么必须在子类中重新声明PoolDictionaries?

来自分类Dev

为什么必须在function()中包含对函数的调用

来自分类Dev

为什么我们必须在onClick方法中添加“视图”作为参数,它的作用是什么?

来自分类Dev

为什么我在属性origin:中获取InvalidValueError:必须在angular中设置location,placeId或query错误之一?

来自分类Dev

为什么我要进入Form1扩展方法必须在非泛型静态类中定义?

来自分类Dev

为什么我必须在C ++中的std :: array <SomeStruct,size>初始化时为每个项目指定类型

Related 相关文章

  1. 1

    为什么我必须在onLoaderReset中交换swapCursor(null)?

  2. 2

    为什么我必须在客户端库中公开宏实现的“使用”?

  3. 3

    为什么我必须在React的匿名函数中包装onClick属性的函数?

  4. 4

    为什么我必须在onCreateView中返回视图而不是直接设置视图?

  5. 5

    为什么我必须在此代码中添加一个新变量

  6. 6

    为什么我们必须在Java脚本(Razor)中对C#代码使用引号

  7. 7

    为什么我必须在ActionScript Project中手动添加Flex库

  8. 8

    为什么我必须在Windows 10中的所有命令后都键入.exe?

  9. 9

    为什么我们必须在代码中本地化$ /?

  10. 10

    JavaScript:为什么我必须在表中单击两次以执行colorActiveLine函数?

  11. 11

    为什么我必须在fold中写下匿名函数的返回类型

  12. 12

    2 维数组。为什么我必须在 C 中声明列的大小

  13. 13

    为什么我必须在jQuery查询后使用[0]

  14. 14

    为什么我必须在mongoDB查询中使用+

  15. 15

    为什么我必须在数据加载之前点击?

  16. 16

    为什么我必须在数据加载之前点击?

  17. 17

    为什么必须在onChanged(在Flutter中)中调用didChange?

  18. 18

    为什么必须在C ++类定义中声明方法?

  19. 19

    为什么必须在最终声明中声明列表

  20. 20

    为什么必须在子类中重新声明PoolDictionaries?

  21. 21

    为什么必须在onCreate中初始化对象?

  22. 22

    为什么必须在类中调用_internal()?

  23. 23

    为什么方法varargs必须在Java的单独块中?

  24. 24

    为什么必须在子类中重新声明PoolDictionaries?

  25. 25

    为什么必须在function()中包含对函数的调用

  26. 26

    为什么我们必须在onClick方法中添加“视图”作为参数,它的作用是什么?

  27. 27

    为什么我在属性origin:中获取InvalidValueError:必须在angular中设置location,placeId或query错误之一?

  28. 28

    为什么我要进入Form1扩展方法必须在非泛型静态类中定义?

  29. 29

    为什么我必须在C ++中的std :: array <SomeStruct,size>初始化时为每个项目指定类型

热门标签

归档