【问题标题】:Android effectively cursor usage?Android有效地使用光标?
【发布时间】:2013-01-20 17:57:11
【问题描述】:

在我的 Android 活动中,我多次使用 rawquery。我为那个 rawquery 使用了一个静态游标。我的问题是:我应该在执行另一个 rawquery 之前关闭我的光标还是让它保持打开状态直到所有 rawqueries 都被执行(只关闭一次)。

我都尝试了,结果是一样的。但就性能/调试而言,哪个更好?

【问题讨论】:

  • "但就性能而言,哪个更好?"如果您使用DDMS 之类的工具,您可以自己轻松回答这个问题。

标签: android cursor android-sqlite


【解决方案1】:

应该在完成后关闭光标。否则你将消耗你的应用程序所有允许的游标资源(它是有限的)并且会得到一个异常。

制作静态并不会使其成为所有人的开放游标。请记住,它在 java 端是静态的;这里有一个本地端,它为每个打开的游标使用新资源。你需要释放这些资源。

【讨论】:

    【解决方案2】:

    如果您在每次使用后不关闭光标,那么您的内存泄漏非常严重。您实际上在做的是为每个查询创建一个新游标,但使用单个静态引用仅引用最新的。 (对旧游标的引用丢失。)

    如果(例如)运行时尝试进行一些垃圾收集,未关闭的游标也可能导致致命错误。如果 SQLiteDatabase 的 finalize() 方法(在垃圾回收中调用)发现某些游标仍处于打开状态,则会引发异常,这可能会导致您的应用程序崩溃。

    【讨论】:

      猜你喜欢
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      相关资源
      最近更新 更多