0

アプリで扱う巨大なデータベース (〜 40K 行) があります。CursorAdaptor を使用してデータベース行全体を表示および検索するリスト ビューを持つアクティビティが 1 つあります。ユーザーがデータベースを操作するたびに、データベースを開いて必要な Cursor を作成し、別のスレッドで Cursor.getCount() を呼び出して、カーソルの遅延の問題に取り組み、将来の操作に備えます。巨大なデータベースに対して Cursor.getCount() を実行するには、約 7 秒かかります。

ユーザーはこのアクティビティを複数回呼び出す可能性があるため、カーソルを静的データ メンバーとしてグローバル クラスに格納し、常に同じカーソルを再利用します。

カーソルとデータベースを適切に閉じないと、奇妙な結果になる可能性があると思います。右?!

私の質問は次のとおりです。いつカーソルとデータベースを閉じる必要がありますか?

アクティビティが非表示から表示に変わるたびにデータベースとカーソルを再度開く必要があるため、Activity.onStop() でデータベースとカーソルを閉じることはできません。また、Activity.onDestroy でクローズした場合、onDestroy が呼び出される前に (デバイスの使用可能なメモリが少ない場合)、アプリが OS によって強制終了される可能性があります。

4

1 に答える 1

1

参照しているように聞こえるインスタンス化の問題に遭遇しないように、このグローバル静的クラスをシングルトンに変えてみませんか。シングルトンで getInstance() を呼び出すと、そのクラス内で常に同じカーソルと DB 接続が取得されます。

于 2012-06-09T04:13:22.183 に答える