我构建了一个使用 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/