Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果我不';在安卓系统中,你不能关闭数据库吗?_Android_Database_Android Sqlite - Fatal编程技术网

Android 如果我不';在安卓系统中,你不能关闭数据库吗?

Android 如果我不';在安卓系统中,你不能关闭数据库吗?,android,database,android-sqlite,Android,Database,Android Sqlite,这个标题听起来可能有点疯狂,但这正是让我困惑的地方。我的应用大量使用本地数据库操作。正如Android文档和一些博客中所建议的,我扩展了SQLiteOpenHelper类,并在那里定义了我的所有DB操作。由于一些my DB操作是在线程中执行的,因此打开和关闭DB会导致一些非法状态异常。因此,我将我的DB助手设置为Singleton,它解决了这些问题,还消除了每个DB操作的open和close操作。现在,尽管我从未关闭数据库,但一切似乎都很正常 我的困惑是有必要关闭DB吗 如果是,那么什么是正确

这个标题听起来可能有点疯狂,但这正是让我困惑的地方。我的应用大量使用本地数据库操作。正如Android文档和一些博客中所建议的,我扩展了
SQLiteOpenHelper
类,并在那里定义了我的所有DB操作。由于一些my DB操作是在线程中执行的,因此打开和关闭DB会导致一些非法状态异常。因此,我将我的DB助手设置为
Singleton
,它解决了这些问题,还消除了每个DB操作的
open
close
操作。现在,尽管我从未关闭数据库,但一切似乎都很正常

  • 我的困惑是有必要关闭DB吗
  • 如果是,那么什么是正确的位置,是在主要活动的
    onDestroy
    中还是在其他地方
  • 如果我不关闭DB,有什么副作用

如果再次尝试打开同一数据库,则可以捕获非法状态异常

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

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


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

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


我相信关闭数据库的最佳位置是在main活动的
ondestory()

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