假设我的代码类似于下面的代码:
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之前这样做?
答案 0 :(得分:24)
ImageView不会自动释放位图
正如@Vipul
所解释的那样必须通过调用bitmap.recycle()
如果要将另一个位图分配给ImageView,请通过调用
来回收前一个位图((BitmapDrawable)imageView.getDrawable()).getBitmap().recycle();
查看this
答案 1 :(得分:8)
当您尝试解码并设置第二个位图时,Java会告诉GC第一个位图需要回收,因为开发人员不再使用它.GC稍后会这样做。
但是如果你大量使用Bitmaps(分配速度可能大于位图被回收的速度),那么你可能想要尽快回收未使用的位图。你应该在使用位图时调用recycle()。 (永远记住,当屏幕上显示位图时,请不要尝试回收位图。)