5

这个问题与如果我们不需要位图,我们是否必须显式回收它?.

有一个 ImageView 有一个 drawable,当用户点击一个按钮时,它会为 ImageView 分配一个新的 drawable。

我们是否要销毁属于ImageView的旧drawable,如何?

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();
}

imageViewImageView.

原始答案在这里

于 2012-09-21T16:07:53.040 回答
4

这只是一个一般性问题还是您的内存不足?在您真的遇到问题之前,我不会进行此优化。

通常,如果您从不大的可绘制文件夹中加载位图(以兆字节为单位),那么您应该不会真正遇到问题。

首先,您需要确保您正在加载的资产对于您显示它们的位置是最佳的,例如,如果您显示图像的区域大小为 64x64,则将 ImageView 设置为大小为 1024 x 1024 的图像是没有意义的.

打破位图预算通常是由于加载了未知尺寸的图像,或者只是如上所述的图像尺寸错误,频繁交换 ImageView 通常不会给您带来最佳尺寸图像的问题。

Android 培训中有一篇很棒的文章,涵盖了最佳加载位图http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

希望有帮助

于 2012-09-21T16:20:39.253 回答