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

标签 android database android-cursorloader

我使用 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/

相关文章:

android - 如何使用游标加载器获取联系人的一些信息?

mysql - 从 MySQL 迁移到 PostgreSQL

php - 在 XML 字段中放置一个函数

Android 查询与 rawQuery 结果

android - CursorAdapter 如何从 Android 中的 CursorLoader 提供的 Cursor 加载数据?

android - 无法获取额外属性的compileSdkVersion属性?

android - VM 范围的 cookie 管理是什么意思?

java - WebView中的loadDataWithBaseURL是如何处理cookies的?

android - 有没有办法在 Android 中获取 SD 卡的大小?

android - CursorAdapter.swapCursor 第一次没有刷新