1

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

该应用程序正在运行,但在日志中多次写入“close() 从未在数据库上显式调用。

我发现了一些关于这个问题的话题,并且对“在 ContentProvider 中关闭数据库是”的响应是:“内容提供者是在创建其托管进程时创建的,并且只要该进程存在就一直存在,因此无需关闭数据库”。

那么,怎么了?由于数据库是在 ContentProvider 中打开的,如果我关闭它,返回的光标将为空,我该如何解决这个问题?

4

1 回答 1

2

当数据库在关闭之前被垃圾收集时,会打印该消息。这里有很多关于这个问题的讨论:

在 ContentProvider 中关闭数据库

tl;博士:别担心。一般来说,关闭数据库实际上会适得其反。关闭您的事务和光标,让 android 管理数据库。

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

于 2013-03-17T18:04:20.393 回答