Android有效游标使用?

时间:2013-01-20 17:57:11

标签: android cursor android-sqlite

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

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

2 个答案:

答案 0 :(得分:0)

完成后, 应该关闭光标。否则你将消耗你的应用程序允许的所有光标资源(它是有限的),并将获得异常。

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

答案 1 :(得分:0)

如果每次使用后都没有关闭光标,则说明内存泄漏严重。你实际在做的是为每个查询创建一个新的游标,但使用一个静态引用只引用最新的。 (对旧游标的引用丢失了。)

如果(例如)运行时尝试进行一些垃圾收集,则未关闭的游标也会导致进一步的致命错误。 SQLiteDatabase的finalize()方法(在垃圾收集时调用)如果它注意到某些游标仍处于打开状态,则会抛出异常,这可能会导致您的应用程序失效。