アプリで扱う巨大なデータベース (〜 40K 行) があります。CursorAdaptor を使用してデータベース行全体を表示および検索するリスト ビューを持つアクティビティが 1 つあります。ユーザーがデータベースを操作するたびに、データベースを開いて必要な Cursor を作成し、別のスレッドで Cursor.getCount() を呼び出して、カーソルの遅延の問題に取り組み、将来の操作に備えます。巨大なデータベースに対して Cursor.getCount() を実行するには、約 7 秒かかります。
ユーザーはこのアクティビティを複数回呼び出す可能性があるため、カーソルを静的データ メンバーとしてグローバル クラスに格納し、常に同じカーソルを再利用します。
カーソルとデータベースを適切に閉じないと、奇妙な結果になる可能性があると思います。右?!
私の質問は次のとおりです。いつカーソルとデータベースを閉じる必要がありますか?
アクティビティが非表示から表示に変わるたびにデータベースとカーソルを再度開く必要があるため、Activity.onStop() でデータベースとカーソルを閉じることはできません。また、Activity.onDestroy でクローズした場合、onDestroy が呼び出される前に (デバイスの使用可能なメモリが少ない場合)、アプリが OS によって強制終了される可能性があります。