Drawable backDrawable;
Bitmap bitmap= .............
backDrawable= new BitmapDrawable(con.getResources(),bitmap);
bitmap.recycle();
我想回收位图以节省内存。但是当我在后面的操作中使用backDrawable时,这段代码崩溃了。只有当我删除了行bitmap.recycle()时才会生效。 BitmapDrawable()只是创建一个引用而不是创建一个新对象吗?
答案 0 :(得分:1)
如果您查看您正在使用的BitmapDrawable
构造函数:
public BitmapDrawable(Resources res, Bitmap bitmap) {
this(new BitmapState(bitmap), res);
mBitmapState.mTargetDensity = mTargetDensity;
}
它会在您的给定BitmapState
内部初始化新的Bitmap
。查看BitmapState
的构造函数:
BitmapState(Bitmap bitmap) {
mBitmap = bitmap;
}
它直接引用您提供的位图。这是有道理的,因为从内存的角度来看,每次要将其包装成Drawable
时复制位图都会非常糟糕。