ImageView.setImageBitmap()是否回收先前设置的位图?

时间:2014-03-17 06:48:05

标签: android android-bitmap

假设我的代码类似于下面的代码:

protected void onCreate(Bundle bundle){

    this.imageView = (ImageView) contentView.findViewById(R.id.imageView);

    this.setFirstBitmap();
    this.setSecondBitmap();
}

private setFirstBitmap(){
    Bitmap bitmap1 = BitmapFactory.decodeFile(bitmapFile1);
    imageView.setImageBitmap(bitmap1);
}

private setSecondBitmap(){
    Bitmap bitmap2 = BitmapFactory.decodeFile(bitmapFile2);
    imageView.setImageBitmap(bitmap2);
}

在这种情况下,imageView回收bitmap1还是我必须在设置bitmap2之前这样做?

2 个答案:

答案 0 :(得分:24)

ImageView不会自动释放位图

正如@Vipul

所解释的那样

必须通过调用bitmap.recycle()

来释放位图参考

如果要将另一个位图分配给ImageView,请通过调用

来回收前一个位图
((BitmapDrawable)imageView.getDrawable()).getBitmap().recycle();

查看this

答案 1 :(得分:8)

当您尝试解码并设置第二个位图时,Java会告诉GC第一个位图需要回收,因为开发人员不再使用它.GC稍后会这样做。

但是如果你大量使用Bitmaps(分配速度可能大于位图被回收的速度),那么你可能想要尽快回收未使用的位图。你应该在使用位图时调用recycle()。 (永远记住,当屏幕上显示位图时,请不要尝试回收位图。)