【问题标题】:Android: do I really need to worry about closing SQLite database instances?Android:我真的需要担心关闭 SQLite 数据库实例吗?
【发布时间】:2011-04-21 19:28:10
【问题描述】:

我的 Android 应用程序经常记录错误,抱怨我未能释放我的语句、游标和数据库。事实上,我在使用它们的代码末尾的 finally{} 块中显式释放了我的所有游标,并且我在包含它们的类的 finalize() 方法中关闭了我的数据库。

我的应用程序的结构使我很难显式调用数据库对象上的 close() 方法(除了在终结器中),因为例如,使用数据库的类不是 Activity 类,而是可能是一个活动间接使用的类。因此,该类本身不知道它最终附加到的 Activity 何时被销毁。

我需要担心这个吗?我是否通过不显式关闭我的数据库实例来永久泄漏一些资源?是否存在无法将某些内容写入文件的危险? Android 上的 SQLite 实现会写缓存吗?我可以将其关闭或强制同步吗?

Android VM 关于终结器的政策是什么 - 它们是否保证最终运行?

弗兰克

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    我在我的应用程序中发现了一个强制关闭问题,该问题是未关闭连接的结果。在我的情况下,查询需要很长时间,用户可以返回活动并重新点击强制执行新查询。

    我只是在调试应用程序时发现了这一点,因为它最终产生了一些我认为在执行时不可能的代码。

    只需关闭我的连接即可解决此问题。所以,长话短说,保持整洁不会有坏处。猜想你知道这一点,而你只是在寻找验证?

    【讨论】:

    • 是的,我通常会清理东西,但在这种情况下,我将数据库功能添加到已经存在的东西上。对于在非 gc 环境中获得的有保证的析构函数调用,有一些话要说。打扫卫生的好地方。
    【解决方案2】:

    Using SQLiteOpenHelper instead of SQLiteDatabase,可能会减少一些异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多