2012-07-12 87 views
5

这个标题听起来有点疯狂,但这是让我困惑的东西。我的应用大量使用本地数据库操作。正如Android文档和一些博客中所建议的那样,我扩展了SQLiteOpenHelper类,并在那里定义了我所有的数据库操作。由于我的一些数据库操作在线程中执行,打开和关闭数据库会导致一些IllegalStateExceptions。所以,我让我的DB帮手为Singleton,它解决了这些问题,也为每个数据库操作摆脱了openclose操作。现在,即使我从不关闭数据库,一切似乎仍然正常。如果我不关闭Android中的数据库会发生什么?

  • 我的困惑是有必要关闭数据库吗?
  • 如果是这样,那么这样做的适当位置是什么,它在onDestroy的主要活动或其他地方?
  • 如果我不关闭DB,有什么副作用?

回答

0

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

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

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

您还可以使用Application类打开数据库,但比它会打开每一次当你的应用程序启动(例如,当您收到BroadcastReceiver

0

为什么你异常的原因是你想通过不同的线程从同一个数据库写入/读取

我相信关闭数据库的最佳位置在mainActivityonDestroy()之内。

0

我面临同样的问题。我打开数据库,执行一些操作,我忘记关闭。其实我看到一些例外,我logcat是“泄漏发现”数据库打开,从来没有关闭。

相关问题