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



假设我有如下代码:

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()。(永远记住,当位图在屏幕上显示时,不要试图循环使用)

最新更新