9

这个标题可能听起来有点疯狂,但这就是让我感到困惑的地方。我的应用大量使用本地数据库操作。正如 Android 文档和一些博客中所建议的那样,我扩展了SQLiteOpenHelper该类并在那里定义了我的所有数据库操作。由于我的一些数据库操作在线程中执行,数据库的打开和关闭会导致一些IllegalStateExceptions. 所以,我做了我的数据库助手Singleton,它解决了这些问题,也摆脱了每个数据库操作的openandclose操作。现在,即使我从未关闭数据库,一切似乎都运行良好。

  • 我的困惑是有必要关闭数据库吗?
  • 如果是这样,那么在什么地方这样做是正确的,是在onDestroy主要活动中还是在其他地方?
  • 如果我不关闭数据库,会有什么副作用?
4

3 回答 3

2

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

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

如果你有DBHelper在服务中的参考,那么它应该在服务中打开和关闭,而不是在活动中。

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

于 2012-07-12T07:40:56.817 回答
0

你得到异常的原因是你试图通过不同的线程从同一个数据库中写入/读取

我相信关闭数据库的最佳位置是在onDestroy()mainActivity内部

于 2012-07-12T07:47:33.797 回答
0

我遇到了同样的问题。我打开了数据库,执行了一些操作,但我忘记了关闭。实际上我看到了一些异常,我 logcat 是“发现泄漏”的数据库被打开并且从未关闭。

于 2012-07-12T08:02:01.213 回答