17

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

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之前这样做?

4

2 回答 2

28

ImageView 不会自动释放位图

正如@Vipul所解释的那样发生

位图引用必须通过调用释放bitmap.recycle()

当您想为 ImageView 分配另一个位图时,通过调用回收前一个位图

((BitmapDrawable)imageView.getDrawable()).getBitmap().recycle();

看看这个

于 2014-03-17T07:12:35.883 回答
11

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

但是,如果您广泛使用位图(分配速度可能大于位图被回收的速度),那么您可能希望尽快回收未使用的位图。您应该在使用完位图后调用 recycle()。(永远记住不要在屏幕上显示位图时尝试回收它。)

于 2014-03-17T06:59:37.880 回答