Android - 新的BitmapDrawable(资源,位图)创建引用或对象?

时间:2014-10-10 19:48:12

标签: android bitmap drawable

Drawable backDrawable;

Bitmap bitmap= .............
backDrawable= new BitmapDrawable(con.getResources(),bitmap);
bitmap.recycle();

我想回收位图以节省内存。但是当我在后面的操作中使用backDrawable时,这段代码崩溃了。只有当我删除了行bitmap.recycle()时才会生效。 BitmapDrawable()只是创建一个引用而不是创建一个新对象吗?

1 个答案:

答案 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时复制位图都会非常糟糕。