1

我遇到了这样的信息,即不关闭游标或数据库会占用内存。所以当我在一百个测试用例中使用光标时,我可能会忘记在某个地方关闭它。我可以声明一个游标并一次又一次地重复使用它,进行不同的引用,最后在 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();

这是一个可行的解决方案?

4

1 回答 1

0

您不能使用单个光标;每次rawQuery调用都会创建一个新的游标对象。当您将新光标对象的引用分配给 时a,旧对象不会关闭(并且您无法再访问它)。

要确保close始终调用它,请使用 try/finally:

Cursor c = db.rawQuery(...);
try {
    ... read data ...
} finally {
    c.close();
}

如果您有一个返回游标的辅助函数,请在调用函数中执行此操作。

于 2013-10-23T20:43:33.997 回答