5

この質問は、ビットマップが不要な場合、明示的にリサイクルする必要がありますか?に関連しています。

ImageViewにはドローアブルがあり、ユーザーがボタンをクリックすると、新しいドローアブルがImageViewに割り当てられます。

ImageViewに属する古いドローアブルを破棄する必要がありますか?また、どのようにしたらよいですか?

Drawable oriDrawable = imageView.getDrawable()

// set callback to null
oriDrawable.setCallback(null);

// get the bitmap and recycle it
((BitmapDrawable)oriDrawable).getBitmap().recycle();

上記のコードは正しいですか?最善の解決策は何ですか?

4

2 に答える 2

12

次のようなものを使用してみてください。

Drawable drawable = imageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
    BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
    Bitmap bitmap = bitmapDrawable.getBitmap();
    bitmap.recycle();
}

あなたはどこimageViewにいますかImageView

ここに元の答え。

于 2012-09-21T16:07:53.040 に答える
4

これは単なる一般的な質問ですか、それともメモリが不足していますか?あなたが本当に問題を抱えるまで、私はこの最適化をしません。

一般に、大きくない(メガバイト単位のように大きい)ドローアブルフォルダからビットマップをロードする場合は、実際に問題が発生することはありません。

まず、ロードするアセットが表示する場所に最適であることを確認する必要があります。たとえば、画像を表示する領域のサイズが64x64の場合、ImageViewを1024x1024のサイズの画像に設定しても意味がありません。 。

ビットマップの予算を超えるのは、通常、サイズが不明な画像を読み込んだり、上記のように画像サイズを間違えたりすることで発生します。ImageViewを頻繁に交換しても、通常、最適なサイズの画像で問題が発生することはありません。

Androidトレーニングには、ビットマップの最適な読み込みについて説明したすばらしい記事がありますhttp://developer.android.com/training/displaying-bitmaps/load-bitmap.html

お役に立てば幸い

于 2012-09-21T16:20:39.253 に答える