startManagingCursor的目的是什么?

Bil*_*hon 17 sqlite android cursor android-loadermanager android-cursorloader

好的,文档声明它允许Activity管理游标的生命周期.但是我没有真正看到它的重点,因为当活动被销毁时,对新创建的游标的任何引用也应该被删除,然后光标本身在下一个垃圾收集周期中就会消失.那为什么要这么麻烦?

hac*_*bod 33

你不应该依赖游标被垃圾收集器销毁...游标代表了大量的资源:游标保存的所有数据,以及与拥有游标的内容提供者的连接,这也意味着需要它过程被保存在记忆中.

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

托管游标在活动被销毁时负责关闭游标,但它们也会执行更多操作:当活动停止并重新启动时,它们将被停用并重新获取.

也就是说,此时您应该考虑弃用托管游标.新的Loader API要好得多,并且对应用程序的用户体验有很多改进 - 它确保所有游标操作都在主线程之外完成(因此UI交互和动画中没有毛刺),并且可以当由于配置更改而重新启动活动而不必重新加载数据时,在活动实例之间传播现有游标数据.

如果您需要在早于3.0的Android旧版本上运行,则可以将v4支持库的Loader实现用于这些应用程序.

  • 如果您自己管理光标,请更正,然后您不想调用startManagingCursor并让框架也管理它(并与您战斗). (6认同)
  • 这是否意味着如果开发人员在onPause()中处理关闭游标并在onResume()中重新查询/初始化游标,那么startManagingCursor()是不必要的,并且所提到的方法可以在3.0 +中使用? (3认同)
  • @Bilthon:Android兼容性库的"Loader"和"Fragment"支持可以追溯到API Level 4. (2认同)