2012-08-09 10 views
15

Cursorに関する質問があります。アンドロイドのカーソルが閉じない不都合

私はCursorを閉じないとどのような欠点があるか知りたいですか?

リソースの割り当てを解除しますが、どのリソースが割り当て解除されますか?

Cursorを閉じることはできませんか?どのような影響がありますか?

Cursorを閉じないと、Activityビットには影響しませんが、ログcatにエラーが発生します。

答えて

-2

カーソルを閉じないと、データベースが開いている間に、アクティビティが一時停止されたような何かが発生した場合にアクセスできなくなるため、データベースのデータにアクセスする際に問題が発生します。具体的には、アクティビティで管理するようにすると、この問題は緩和されます。

+0

私はコードを閉じてデータを正しく表示しています。データにアクセスしていて、アプリケーションが正常に実行されています。 logcatでエラーが発生しています。カーソルのファイナライズが無効化されていないか閉じる – Haris

+0

manageCursor(X)を使用して、カーソルの意味を制御するアクティビティを使用しましたか? – JoxTraex

+0

いいえ、それはmanageを使わずに作業しています – Haris

7

Cursorを閉じると、メモリリークの可能性が回避されますので、YESこれらは、使用しなくなった時点で必ず閉じてください。

+0

isnt javaはすべてのメモリの問題を処理しますか?この場合の特別なリソースは何ですか?私はそれが近いべきであることを知っている、私はちょうど理由を知りたいですか? – Haris

+0

'Cursor'には、ファイルハンドルなどのネイティブリソースがあります(SQLiteデータベースはインデックスファイルを使用しています)。また、「Cursor」は閉鎖を保証するために 'finally'ブロックで閉じなければなりません。 –

+1

どのネイティブリソース?彼らがどうやってそれほど有害なのか?極端なダメージを与えないでください。 – Haris

3

カーソルはインターフェイスに過ぎません。多くの実装に依存し、クリーンアップを取得してかなりの数のものがあるSQLiteCursorの場合は具体的にどのようなあなたが使用しているインターフェイスを実装するクラス...

(これはフローズンヨーグルトからです):

@Override 
public void close() { 
    super.close(); 
    deactivateCommon(); 
    mQuery.close(); 
    mDriver.cursorClosed(); 
} 
は、データがまだ一貫している必要があり、あなたのカーソルを閉じていない、しかし、あなたは私はあなたが1カーソルを閉め忘れから多くの問題を参照してくださいよとは思わない

3

...メモリリークが発生しようとしています。問題(これはほぼすべてのメモリリークに適用されます)は、何度も何度もやり続けると、最終的に何か悪いことが起こるということです。

たとえば、デバイスのSQLite DBからサーバーにデータをアップロードするアプリケーションを作成しました。私がデータベースからの読み書きを終えるたびにカーソルを閉じることができなければ、最終的にはメモリ不足のエラーやその他のさまざまな問題が発生します。

関連する問題