Присвоение растрового изображения ImageView через setImageURI вызывает исключение OutOfMemory - PullRequest
0 голосов
/ 02 августа 2011

У меня есть активность с пустым ImageView и кнопкой.После нажатия кнопки я отображаю медиа галерею устройства, пользователь выбирает изображение, которое передается в действие через намерениеЯ использую URI изображения из возвращенных данных и заполняю ImageView, например:

private ImageView pic;

@Override
public void onCreate(Bundle savedInstanceState) 
{

      pic = (ImageView)findViewById(R.id.bbChildImage);

}

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{  

        if(resultCode == RESULT_OK)
        {   
            URI currImageURI = data.getData();
            pic.setImageURI(currImageURI);
        }
}

Теперь, если я выберу другое изображение из галереи, после того, как данные возвращены, я получаю растровое изображениеСвязанное исключение OutOfMemory.

Я нашел два способа избавиться от этого.Я делаю это перед назначением URI:

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

или вместо того, чтобы назначить URI представлению, сначала получаю растровое изображение, а затем назначаю его следующим образом:

Bitmap thumbnail = MediaStore.Images.Media.getBitmap(this.getContentResolver(), currImageURI);
pic.setImageBitmap(thumbnail);

Я не уверен, какой из них лучше.Кроме того, если есть лучшие способы, я был бы признателен за обратную связь.

Спасибо.

1 Ответ

1 голос
/ 02 августа 2011
  1. Переработка, как правило, путь.Если вам не требуется растровое изображение, сообщите об этом операционной системе, переработав его.

  2. В дополнение к этому я бы использовал BitmapFactory для создания растрового изображения и использования параметров для сжатияэто при загрузке.Не делайте его больше, чем экран устройства.Это сэкономит много памяти.

...