私の Android アクティビティでは、rawquery を何度も使用しています。そして、その rawquery に静的カーソルを使用します。私の質問は次のとおりです。別の rawquery を実行する前にカーソルを閉じるか、すべての rawquery が実行されるまで開いたままにしておく必要があります (1 回だけ閉じます)。
両方試してみましたが、結果は同じです。しかし、パフォーマンス/デバッグに関しては、どちらが優れていますか?
私の Android アクティビティでは、rawquery を何度も使用しています。そして、その rawquery に静的カーソルを使用します。私の質問は次のとおりです。別の rawquery を実行する前にカーソルを閉じるか、すべての rawquery が実行されるまで開いたままにしておく必要があります (1 回だけ閉じます)。
両方試してみましたが、結果は同じです。しかし、パフォーマンス/デバッグに関しては、どちらが優れていますか?
終了したらカーソルを閉じる必要があります。そうしないと、アプリケーションで許可されているすべてのカーソルリソースを消費し(制限されます)、例外が発生します。
静的にしたからといって、すべてのカーソルが1つ開いているわけではありません。Java側では静的であることを忘れないでください。ここには、開いたカーソルごとに新しいリソースを使用するネイティブ側があります。これらのリソースを解放する必要があります。
使用するたびにカーソルを閉じないと、メモリ リークがひどくなります。実際に行っているのは、すべてのクエリで新しいカーソルを作成することですが、単一の静的参照を使用して最新のもののみを参照しています。(古いカーソルへの参照は失われます。)
クローズされていないカーソルは、(たとえば) ランタイムがガベージ コレクションを実行しようとした場合に、致命的なエラーを引き起こす可能性もあります。SQLiteDatabase のfinalize()
メソッド (ガベージ コレクションで呼び出される) は、一部のカーソルがまだ開いていることに気付くと例外をスローし、これによりアプリが強制終了される可能性があります。