你应该在android活动生命周期中关闭数据库的哪个位置?

时间:2012-04-01 02:21:36

标签: android database android-activity

你应该在onDestroy()或onStop()函数中关闭它吗?

4 个答案:

答案 0 :(得分:3)

我个人更喜欢在使用它之后立即关闭数据库,保持数据库打开类似于保持FileStream打开,我认为这不是一个好主意。根据您的使用情况,您应该尽快在数据库上调用close();

更新

关于原始问题,可以在onDestroy()事件上关闭数据库。

答案 1 :(得分:1)

最好最迟以onPause()方法关闭数据库。在此之后,如果操作系统需要资源,可能会在不事先通知的情况下终止该操作,从而可能会损坏您的数据库。绝对不要将此推迟到onStop()onDestroy()。来自the docs

  

onPause()是保证在进程被终止之前被调用的最后一个方法 - 如果系统必须在紧急情况下恢复内存,则可能不会调用onStop()onDestroy()

另一种方法是将您的所有数据库访问权限移至Service或ContentProvider,它们具有各自的生命周期和与操作系统交互的规则。

答案 2 :(得分:0)

我从未明确关闭SQLite数据库。

我总是使用扩展SQLiteOpenHelper的类,并且有方法可以执行我需要的任何操作,并且永远不会保留对数据库本身的永久引用。一旦SQLiteOpenHelper超出范围,就会清理数据库引用。

YMMV,但它归结为你如何设计你的应用程序 - 在我开始为Android编程之前,我已经在Windows平台上使用SQLite数据库很多年了,而且我还没有一个损坏的数据库。 / p>

答案 3 :(得分:0)

您必须在不再需要该连接时立即关闭数据库连接,并且还必须关闭该连接,您必须调用close()。