У меня есть активность с пустым 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);
Я не уверен, какой из них лучше. Кроме того, если есть лучшие способы, я был бы признателен за обратную связь.
Спасибо.