android - 明确地关闭 SQLite 数据库中的 Cursor,需要还是不需要?

标签 android sqlite android-cursor

据我了解,在关闭数据库后,游标变为“无效”,是否也同时关闭了游标?这是否避免了必须执行如下所示的操作?

示例 1

 public void String getResultsAndReturnString() {
      String result = "";
      SQLiteDatabase db = dbHelper.getReadableDatabase();
      Cursor cursor = qb.query(db, projection, null, null,
                    null, null, null);
      cursor.close();  <-- explicit cursor close example one
      db.close();
     return result;
  }

示例 2

public void Cursor getResultsAndReturnCursor(){
   SQLiteDatabase db = dbHelper.getReadableDatabase();
   Cursor cursor = qb.query(db, projection, null, null,
                    null, null, null);
   return cursor;
}

public void closeOut(Cursor cursor, SQLiteDatabase dataBase){
     cursor.close();   <-- explicit cursor close example two
     dataBase.close();
}

最佳答案

游标在严格意义上并没有通过关闭数据库来关闭(它仍然存在并且您可以对其执行操作),但是如您所知,关闭数据库会使游标变得无用。出于多种原因,您应该在使用完游标后明确关闭它们:

1) 正如您所指出的,关闭数据库后,任何剩余的游标都将变为“无效”,并且无法依赖准确数据;

2) 您将在 LogCat 中看到警告;

3) 如果你维护对游标的引用,你就有内存泄漏的风险;和

4) 关闭不再需要的资源是一种很好的编程习惯。

关于android - 明确地关闭 SQLite 数据库中的 Cursor,需要还是不需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16641555/

相关文章:

android - 使用 Gradle 从 Javadoc 任务中排除 aidl 文件

android - 操作栏出现空指针异常

java - Android sqlite查询获取值大于某个值的表

无限循环中的android光标

android - ContentProvider 中的光标包装/展开

android - 将 SQLite 数据库加载到 Android 应用程序中(超过 1MB)

c - Sqlite 通过 C 不返回普通 sqlite 所在的结果

java - 在内部存储中保存自定义对象的 ArrayList

android - 如何从线程表中的 recepient_ids 中获取联系方式

Android - Sdcard 不创建/复制文件