【问题标题】:Do I need call close() when I use getWritableDatabase()?使用 getWritableDatabase() 时是否需要调用 close()?
【发布时间】:2016-01-29 03:36:21
【问题描述】:

如果我有这样的代码

private final SQLiteDatabase database;
private final SQLiteOpenHelper helper;
// ...
this.database = helper.getWritableDatabase();
// ...

我需要显式调用 close() 吗?

我对这个答案感到困惑:https://stackoverflow.com/a/18595604/4932519

查看 getWritableDatabase() 的文档:

一旦打开成功,数据库就被缓存了,所以你可以调用这个 每次需要写入数据库的方法。 (确保 当您不再需要数据库时调用 close()。)

附:对不起我的英语。

【问题讨论】:

    标签: java android sqliteopenhelper


    【解决方案1】:

    close() 的一次呼叫应始终与对getWritableDatabase() 的每次呼叫配对。

    当您为每个查询调用一次 getWritableDatabase() 时,您还应该在完成查询后调用 close()

    当您在 Activity 启动时调用 getWritableDatabase() 并保存引用时,您应该在 Activity 关闭时调用 close()

    【讨论】:

    • 我的答案和那个答案并不矛盾。
    • “并且从不明确关闭该实例”怎么样?
    • 它最终会被隐式关闭。当您重复调用 getWritableDatabase() 时,显式调用 close() 更为重要,因为所有这些对象可能会在下一次垃圾回收之前堆积起来,并耗尽所有可用的文件句柄。
    • 是的,在下一次垃圾回收时。
    • 是的,这是不好的做法。但是单个尚未关闭的数据库对象无所谓,只有在内存紧张的情况下才会关闭活动,因此很可能会发生垃圾回收。
    猜你喜欢
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2017-06-06
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 2012-08-03
    相关资源
    最近更新 更多