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