据我了解,在关闭数据库后,游标变为“无效”,是否也同时关闭了游标?这是否避免了必须执行如下所示的操作?
示例 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/