在我的Android活动中,我多次使用rawquery。我为该rawquery使用静态游标。我的问题是:我应该在执行另一个rawquery之前关闭我的光标,或者只是让它打开直到所有的rawqueries都被执行(只关闭一次)。
我试试两个,结果是一样的。但就性能/调试而言,哪个更好?
答案 0 :(得分:0)
制作静态不会使它成为所有人的开放光标。记住它在java端是静态的;这里有一个本机端,为每个打开的游标使用新资源。你需要释放这些资源。
答案 1 :(得分:0)
如果每次使用后都没有关闭光标,则说明内存泄漏严重。你实际在做的是为每个查询创建一个新的游标,但使用一个静态引用只引用最新的。 (对旧游标的引用丢失了。)
如果(例如)运行时尝试进行一些垃圾收集,则未关闭的游标也会导致进一步的致命错误。 SQLiteDatabase的finalize()
方法(在垃圾收集时调用)如果它注意到某些游标仍处于打开状态,则会抛出异常,这可能会导致您的应用程序失效。