1

通常、手動でリソースを解放する必要がないため、常にDrawableリソースを使用します。Imageviews

しかし、場合によっては、ビットマップを動的に作成する必要があり、手動recycle()でそれらを呼び出す必要がありonDestroy()ます。それは、他の StackOverflow questionによると、私が見つけた最良の解決策です。

DrawableAndroid がリソースを管理する方法と、それらを手動でリサイクルする必要がない理由を理解したいです。そして、理解したら、手動で作成されたビットマップに同様のロジックを適用できるかどうかを確認してください。

4

1 に答える 1

0

ADrawableは a よりもはるかに広範ですBitmapDrawableグラフィックス システムがディスプレイにレンダリングできるものを表すことを目的としています。-やDrawable- などのサブクラスがあり、これらは s を含まないため、手動でのメモリ管理は一切必要ありません。ShapeDrawableColorDrawableBitmap

aは a をBitmapDrawableラップし、Bitmapa への参照を含みますBitmapBitmapAndroid はすべてのピクセル データをBitmaps別のヒープに保持し、アプリケーションの残りの部分とは別に管理するため、これは特別です。Android ガベージ コレクターがBitmapオブジェクトをクリーンアップすると、ビットマップ ヒープからピクセル データもクリーンアップされます。recycle()ただし、 を手動で呼び出してBitmap、無効をマークし、Bitmapそのピクセル データを解放することで、より早く発生させることができます。

BitmapAndroid は、実行中のアプリケーションごとに固定サイズのビットマップ ヒープを割り当てます。一度に使用中の が多すぎると、アプリがヒープを使い果たす可能性があります。そのため、アプリケーションでビットマップを広範囲に使用する場合、ビットマップが不要になるとすぐにビットマップを再利用することでメリットが得られるでしょう。

更新:コメントに記載されているように、個別のビットマップ ヒープは Android のハニカム以前のバージョンに適用されます。Honeycomb の時点で、ビットマップ ヒープはアプリケーション ヒープに統合されました。詳細情報を含む SO 投稿を次に示します。

于 2012-08-06T18:53:56.397 に答える