如果我们不需要它,如何在ImageView内部销毁drawable?

Fre*_*ind 4 android imageview destroy

这个问题与我们是否必须明确地回收位图有关,如果我们不需要它?.

有一个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();
Run Code Online (Sandbox Code Playgroud)

上面的代码是否正确?什么是最好的解决方案?

Rag*_*ood 12

您可以尝试使用以下内容:

Drawable drawable = imageView.getDrawable();
if (drawable instanceof BitmapDrawable) {
    BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
    Bitmap bitmap = bitmapDrawable.getBitmap();
    bitmap.recycle();
}
Run Code Online (Sandbox Code Playgroud)

imageView你的位置在哪里ImageView

原来答案在这里.


Ian*_*ick 4

这只是一个一般性问题还是您内存不足?除非你确实遇到问题,否则我不会进行此优化。

一般来说,如果您从不大(大到兆字节)的可绘制文件夹加载位图,那么您应该不会真正遇到问题。

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

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

Android Training 中有一篇很棒的文章,介绍了如何最佳地加载位图http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

希望有帮助