カーソルを使用して、sqlite dbからrawQueryを介してデータを選択し、AndroidにListViewを設定するアプリがあります。ユーザーがリストビューアイテムをクリックするたびに、アクティビティの新しいインスタンスを作成してリストビューを再生成します。メモリの問題を回避するためにcursor.close()
およびdb.close()
を呼び出す方が良いですか?実際には、アクティビティのdb.close()
にOnDestroy()
があります。
メソッド内の特定のオブジェクトの値を取得したら、cursor
を閉じることができます。
ところで...ユーザーがクリックするたびにlistview
を再作成する必要はありません。リストビューに設定されているアダプタのデータに変更があることを通知してください。
何かのようなもの
youradaptername.notifyDataSetChanged();
これにより、ur listview
内のコンテンツが自動的に再入力されます。
同じアクティビティのたびに新しいインスタンスを作成している場合(ただし、プログラミングが適切かどうかはわかりません)。リストビューのソースの走査/反復が完了するとすぐに、カーソルを閉じることができます。
例:
サンプル実装は次のようになります
//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 ...