32

I have an app that uses a cursor to select data via rawQuery from an SQLite DB to populate a ListView in Android. Every time the user clicks on a listview item I create a new instance of Activity to re-populate listview.

Is it better to call cursor.close() and db.close() to avoid memory problems? I actually have db.close() in OnDestroy() of my activity.

4

2 に答える 2

21

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

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

何かのようなもの

youradaptername.notifyDataSetChanged();

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

于 2010-11-08T11:56:11.500 に答える
6

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

例:

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

//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 ...
于 2010-11-08T11:57:03.917 に答える