2013-08-26 15 views
12

Bitmap.recycle()のAndroidの参考資料によると:使用後にBitmap.recycle()を呼び出す必要がありますか?

無料このビットマップに関連付けられているネイティブオブジェクト、およびピクセルデータへ の参照をオフにします。これはピクセルデータ を同期して解放しません。 が他の参照でない場合、単にガーベジコレクションすることができます。ビットマップは "dead"とマークされます。つまり、 はgetPixels()またはsetPixels()が呼び出された場合に例外をスローし、 は何も描画しません。この操作は元に戻すことはできませんので、 ビットマップの使用がないと確信がある場合は、 を呼び出す必要があります。 これはアドバンストコールです。 このビットマップへの参照がない場合は、通常のGCプロセスでこのメモリが解放されるため、通常は呼び出す必要はありません。

しかし、読んだ本の多くは、Bitmap.recycle()を呼び出すことでメモリを解放することを推奨しています。

私は混乱します。使用後にBitmap.recycle()に電話する必要がありますか?

+2

GCは使用されていないときにビットマップを解放しますが、 'recycle()'を呼び出すとGCがメモリのその部分が空いているかどうかを確認するのに役立ちます。ビットマップを読み込んだりアンロードしたりするときに 'recycle()'を呼び出すことは、リストやギャラリーのように良い方法かもしれません –

答えて

1

これは必須ではありませんが、お勧めします。メモリを解放する処理が高速化され、Out of Memory例外が発生しても拷問の手間を省くことができます。

もしあなたが深刻なメモリをビットマップで広範な作業をするつもりなら、私は必須と言います。

0

以前のAndroid 3.0ビットマップは、ピクセルを保存するためにネイティブメモリを割り当て、recycle()はその領域で削除を呼び出します。

それでも、GCがそのメモリを解放することを保証していないとしても、まだ参照がある場合はそのメモリを解放することはできません。

しかし、この呼び出しは、GCがうまく動作するのに役立ちます。メモリを大量に使い、新しいデバイスで実行するアプリを開発しました。 。

17

です。

Android 3.0以上でアプリを実行する場合は、GCが完全に世話をするため不要です。

しかし、以前のバージョンでアプリケーションを実行した場合、Google IO講義hereに示されているように、ビットマップがGCによってうまく監視されないため(参照サイズが問題だと思います)、OOMを取得できます。 。

いずれにしても、ビットマップが不要になったらすぐにリサイクルを呼び出すことをおすすめします。それは自動メモリ管理に必要な作業を減らすので、新しいアンドロイドバージョンでも良いです...

実際、私は似たような質問をしたことを覚えています。here

また、JNIを使​​用してビットマップをさらに制御する必要がある場合は、this postをチェックしてください。

要するに、答えはもう必要ではないが、依然として推奨されるということです。

関連する問題