java - android:为什么要关闭 SQLite 数据库游标,尽管它们会在它们的 finalize 方法中关闭?

标签 java android cursor sqliteopenhelper finalize

我构建了一个使用 SQLiteOpenHelper 的应用程序,我发现我从查询中收到的游标对象正在其 finalize 方法中自行关闭。

我知道不建议依赖 finalize 方法,但如果我工作正常并且不保留对任何对象(在单例、列表、异步任务等中)的不必要引用,我不能确定我所有的光标对象将被释放(在 Activity 或 fragment 销毁后)?

最佳答案

I know it's not recommended to rely on the finalize method

很好,因为这就是正是它在 finalize 子句之前关闭的原因。

引用Effective Java :“永远不要依赖终结器来更新关键的持久状态”,因为“终结器的一个缺点是不能保证它们会被及时执行”。

由于关闭连接正在改变持久状态(关于数据库),您应该在终结器之前关闭。

此外,游标对象不会自动“释放”。数据库本身是“缓存的”,因此无论对象本身是否被释放都不会改变数据库的状态。查看this question了解更多详情。

关于java - android:为什么要关闭 SQLite 数据库游标,尽管它们会在它们的 finalize 方法中关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35083646/

相关文章:

java - 从 Sqlite 获取用户为空

c# - 如何转换此代码,使其现在使用依赖注入(inject)模式?

java - 在 Grails 中放置文本文件的位置,以及如何获取路径

android - 透明导航软按键

sql - 从多个 TableView PostgreSQL 中获取游标

java - 更改警报框中 JavaFX 中的光标

java - 在另一个 JFrame 上显示主类的数据

java - Java 中的 Web 匿名器

java - 在 android studio 上创建我的第一个 HelloWorld 应用程序时出现问题

android - Opengl - glGenTextures 错误 1280