如何关闭Android中ContentProvider中使用的数据库

时间:2013-03-17 17:47:51

标签: android database android-cursorloader

我正在使用CursorLoader和ContentProvider将数据库的内容加载到GridView中。

应用程序正在运行但是在日志中写了几次“close()从未在数据库上显式调用。”

我发现了一些关于这个问题的主题以及对“ContentProvider中的关闭数据库”的响应:“内容提供程序是在创建托管进程时创建的,并且只要进程有效,就会保留,所以没有需要关闭数据库“。

那么,出了什么问题? 当数据库在ContentProvider中打开时,如果我关闭它,返回的光标将为空,我如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

在关闭之前对db进行垃圾回收时会打印该消息。这里有很多关于这个问题的讨论:

Closing the database in a ContentProvider

tl;博士:别担心。通常,关闭数据库实际上会产生相反的效果。关闭你的交易和你的游标,让android管理数据库。

顺便说一句,小心打开onCreate中的数据库。如果使用SQLiteDatabaseHelper打开数据库,则可能会调用onUpdate方法。在更新数据库的过程中,没有太多可能比让你的程序被ANR杀死更糟糕。