18

我有一些关于Cursor.

我想知道不关闭 a 的缺点是Cursor什么?

它释放资源,但释放了哪些资源?

如果我们不关闭Cursor?后果是什么,程度如何?

不关闭 aCursor不会Activity有一点影响,但它会在 log cat 中产生错误。

4

4 回答 4

8

关闭 aCursor将避免任何潜在的内存泄漏,因此的,它们应该在不再使用时始终关闭。

于 2012-08-09T21:35:48.967 回答
4

我认为您不会因为忘记关闭一个光标而看到很多问题。问题(这适用于几乎所有内存泄漏)是,如果你一遍又一遍地这样做,最终会发生一些不好的事情。

例如,我编写了一个将数据从设备的 SQLite DB 上传到服务器的应用程序。如果每次从数据库读取和写入数据时我都没有关闭游标,最终我会遇到内存不足错误和其他各种问题。

于 2012-08-09T22:46:42.480 回答
3

光标只是一个界面。很大程度上取决于实现,实现您正在使用的接口的特定类......

在 SQLiteCursor 的情况下,有很多事情需要清理(来自 Froyo):

@Override
public void close() {
    super.close();
    deactivateCommon();
    mQuery.close();
    mDriver.cursorClosed();
}

不关闭光标,数据应该仍然是一致的,但你会泄漏内存......

于 2012-08-09T22:15:44.233 回答
-2

如果您不关闭游标,那么您将无法访问数据库中的数据,因为当数据库打开时,如果发生 Activity 暂停或其他情况,则无法访问它。具体来说,如果让 Activity 来管理,这个问题就可以得到缓解。

于 2012-08-09T21:29:25.200 回答