我遇到了这个信息,没有关闭光标或数据库吞噬了内存。因此,当我在一百个测试用例中使用光标时,我可能会忘记在某处关闭它。我可以声明一个游标并重复使用它再次制作不同的引用,最后在OnDestroy()方法中关闭它。
Eg. Cursor a;
//Another function
a = as.rawQuery("select * from verse"+k, null);
//Another function
a = bs.rawQuery("select * from hello", null); //Another database
//Another function
a = cs.rawQuery("select * from chapter", null); //Another database
//OnDestroy()
a.close();
这是一个可行的解决方案吗?
答案 0 :(得分:0)
您不能使用单个游标;每个rawQuery
调用都会创建一个新的游标对象。
当您将新光标对象的引用分配给a
时,旧对象不会关闭(并且您无法再访问它)。
要确保始终调用close
,请使用try / finally:
Cursor c = db.rawQuery(...);
try {
... read data ...
} finally {
c.close();
}
如果你有一个返回光标的辅助函数,请在调用函数中执行此操作。