Подтвердить что ты не робот

Does 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 переработать битмап1 или мне нужно сделать это, прежде чем устанавливать битмап2?

4b9b3361

Ответ 1

ImageView не выпускает растровые изображения автоматически

Это происходит, как объясняется @Vipul

Ссылка на битмапы должна быть выпущена вызовом bitmap.recycle()

Если вы хотите назначить другое растровое изображение для утилиты ImageView предыдущей, вызывая

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

Взгляните на

Ответ 2

Когда вы пытаетесь декодировать и устанавливать вторую растровую карту, Java сообщит GC, что первая растровая карта должна быть переработана, так как разработчик больше не использует ее .GC сделает это позже.

Но если вы широко используете растровые изображения (скорость распределения может быть больше скорости, с которой растровое изображение получает рециркуляцию), вы можете захотеть переработать неиспользуемые битовые карты ASAP. Вы должны вызвать recycle(), когда вы закончите с помощью растрового изображения. (Всегда помните, не пытайтесь переработать растровое изображение, когда оно отображается на экране.)