android - startManagingCursor 的目的是什么?

标签 android sqlite android-cursorloader android-loadermanager

好的,文档声明它让 Activity 管理光标的生命周期。但是我并没有真正看到它的意义,因为当 Activity 被销毁时,对新创建的游标的任何引用也应该被删除,然后游标本身在下一个垃圾收集周期中消失。那何必呢?

最佳答案

您不应该依赖游标被垃圾收集器销毁...游标代表大量资源:游标持有的所有数据,加上与拥有游标的内容提供者的连接,这也意味着要求将其进程保存在内存中。

在较新的 Android 版本中,如果游标的终结器在未显式关闭的情况下运行,则会打印日志消息,因为应用程序在完成游标后关闭游标非常重要。

托管游标负责在 Activity 被销毁时关闭游标,但它们的作用还不止于此:它们将在 Activity 停止和重新启动时被停用和重新查询。

也就是说,此时您应该考虑弃用托管游标。新的 Loader API 好多了,并且对您的应用程序的用户体验进行了许多改进——它确保所有光标操作都在主线程之外完成(因此您的 UI 交互和动画中不会出现故障),并且可以当由于配置更改而重新启动 Activity 时,跨 Activity 实例传播现有游标数据,而不必重新加载数据。

如果您需要在比 3.0 更早的 Android 版本上运行,您可以为这些应用程序使用 v4 支持库的 Loader 实现。

关于android - startManagingCursor 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6542745/

相关文章:

android - 整个应用程序的自定义字体

php - 为什么只有在 Windows 上运行 PHP 而在 CentOS 上不显示此行?

java - 如何显示sqlite数据库中的所有数据

r - 如何在 R 包中包含 sqlite 数据库文件。以便我可以与数据库文件一起共享/发布它?

java - Android:闹钟应用程序的结构

Android动态添加下划线

android - 全屏宽度的 DialogPreference

android - 使用游标适配器和加载器时动态编辑 ListView 项

android - 如何在 android 的 LoaderManager 中使用两个 Cursors 和 CursorJoiner

android - 不使用 ContentProvider 时使用 CursorLoader