我使用 CursorLoader 和 ContentProvider 将数据库的内容加载到 GridView 中。
应用程序正在运行,但在日志中多次写入“close() 从未在数据库上显式调用。
我发现了一些关于此问题的主题以及对“ContentProvider 中关闭数据库”的响应:“内容提供程序是在创建其托管进程时创建的,并且只要该进程存在,就会一直存在,因此没有需要关闭数据库”。
所以,出了什么问题? 由于数据库是在ContentProvider中打开的,如果我关闭它,返回的光标将为空,我如何解决这个问题?
最佳答案
当数据库在关闭之前被垃圾收集时,会打印该消息。这里有很多关于这个问题的讨论:
Closing the database in a ContentProvider
tl;博士:别担心。一般来说,关闭数据库实际上会适得其反。关闭你的事务和游标,让 android 管理数据库。
顺便说一句,请注意在 onCreate 中打开数据库。如果您使用 SQLiteDatabaseHelper 打开数据库,则可能会调用 onUpdate 方法。没有什么比在更新数据库过程中程序被 ANR 终止更糟糕的了。
关于android - 如何关闭 Android 中 ContentProvider 中使用的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15464058/