如果我不在Android中关闭数据库,会发生什么?

时间:2012-07-12 07:33:05

标签: android database android-sqlite

这个标题可能听起来有点疯狂,但这让我感到困惑。我的app大量使用本地数据库操作。正如Android文档和一些博客中所建议的那样,我扩展了SQLiteOpenHelper类并在那里定义了我的所有数据库操作。由于我的一些数据库操作在线程中执行,因此打开和关闭数据库会导致一些IllegalStateExceptions。所以,我将我的数据库助手设为Singleton,它解决了这些问题,同时也解除了每个数据库操作的openclose操作。现在一切似乎工作正常,即使我从未关闭数据库。

  • 我的困惑是,是否有必要关闭DB?
  • 如果是这样,那么在主要活动的onDestroy或其他地方进行的合适地点是什么?
  • 如果我不关闭DB,有什么副作用?

3 个答案:

答案 0 :(得分:0)

如果您尝试再次打开同一个数据库,则可以捕获IllegalStateException

如果您在DBHelper主要活动方法中创建onCreate的实例,则会在onDestroy中写入关闭数据库。因此,您可以确定,下次onCreate您的数据库尚未打开。

如果您在服务中引用了DBHelper,那么它应该在服务中打开和关闭,而不是在活动中。

您也可以使用Application类打开数据库,但每次应用启动时都会打开(例如,当您收到BroadcastReceiver时)

答案 1 :(得分:0)

您获得异常的原因是您尝试通过不同的线程从同一数据库写入/读取

我认为关闭数据库的最佳位置是在 mainActivity onDestroy()内。

答案 2 :(得分:0)

我面临同样的问题。我打开数据库,执行一些操作,我忘了关闭。实际上我看到了一些例外,我发现“泄漏发现”数据库已打开并且从未关闭。