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

Gan*_*h K 7 database android android-sqlite

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

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

Jin*_*n35 2

IllegalStateException如果您尝试再次打开同一个数据库,您就会发现。

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

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

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