0

私の Android アクティビティでは、rawquery を何度も使用しています。そして、その rawquery に静的カーソルを使用します。私の質問は次のとおりです。別の rawquery を実行する前にカーソルを閉じるか、すべての rawquery が実行されるまで開いたままにしておく必要があります (1 回だけ閉じます)。

両方試してみましたが、結果は同じです。しかし、パフォーマンス/デバッグに関しては、どちらが優れていますか?

4

2 に答える 2

0

終了したらカーソルを閉じる必要があります。そうしないと、アプリケーションで許可されているすべてのカーソルリソースを消費し(制限されます)、例外が発生します。

静的にしたからといって、すべてのカーソルが1つ開いているわけではありません。Java側では静的であることを忘れないでください。ここには、開いたカーソルごとに新しいリソースを使用するネイティブ側があります。これらのリソースを解放する必要があります。

于 2013-01-21T13:34:17.813 に答える
0

使用するたびにカーソルを閉じないと、メモリ リークがひどくなります。実際に行っているのは、すべてのクエリで新しいカーソルを作成することですが、単一の静的参照を使用して最新のもののみを参照しています。(古いカーソルへの参照は失われます。)

クローズされていないカーソルは、(たとえば) ランタイムがガベージ コレクションを実行しようとした場合に、致命的なエラーを引き起こす可能性もあります。SQLiteDatabase のfinalize()メソッド (ガベージ コレクションで呼び出される) は、一部のカーソルがまだ開いていることに気付くと例外をスローし、これによりアプリが強制終了される可能性があります。

于 2013-01-21T13:38:14.390 に答える