web-dev-qa-db-ja.com

Androidでカーソルを閉じるのはいつですか?

カーソルを使用して、sqlite dbからrawQueryを介してデータを選択し、AndroidにListViewを設定するアプリがあります。ユーザーがリストビューアイテムをクリックするたびに、アクティビティの新しいインスタンスを作成してリストビューを再生成します。メモリの問題を回避するためにcursor.close()およびdb.close()を呼び出す方が良いですか?実際には、アクティビティのdb.close()OnDestroy()があります。

32
Cris

メソッド内の特定のオブジェクトの値を取得したら、cursorを閉じることができます。

ところで...ユーザーがクリックするたびにlistviewを再作成する必要はありません。リストビューに設定されているアダプタのデータに変更があることを通知してください。

何かのようなもの

youradaptername.notifyDataSetChanged();

これにより、ur listview内のコンテンツが自動的に再入力されます。

21
DeRagan

同じアクティビティのたびに新しいインスタンスを作成している場合(ただし、プログラミングが適切かどうかはわかりません)。リストビューのソースの走査/反復が完了するとすぐに、カーソルを閉じることができます。

例:

サンプル実装は次のようになります

//Pre cursor code
startManagingCursor(cursor);
if (cursor.moveToFirst()) {
    do {
        if (cursor.getString(0).equals(value)) {
            cursor.close();
            a = true;
            return a;
        }
    } while (cursor.moveToNext());
}

//Close cursor here, when its work is complete
cursor.close();

//Post cursor code ...
6
Muhammad Shahab