7

データベースを閉じた後、カーソルが「無効」になるとのことですが、同時にカーソルも閉じますか?それは、以下に示されていることをする必要を回避しますか?

例 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();
}
4

1 に答える 1

10

データベースを閉じることによってカーソルが厳密に閉じられるわけではありませんが (まだそこにあり、操作を実行できます)、ご存知のように、データベースを閉じるとカーソルが役に立たなくなります。カーソルを使用した後は、いくつかの理由から明示的にカーソルを閉じる必要があります。

1)ご指摘のとおり、データベースを閉じた後、残りのカーソルは「無効」になり、正確なデータを信頼できなくなります。

2) LogCat に警告が表示されます。

3) カーソルへの参照を維持すると、メモリ リークのリスクがあります。と

4) 不要になったリソースを閉じることは、単純に良いプログラミングの実践です。

于 2013-05-20T02:12:31.390 に答える