BitmapFactory вызывает сбой приложения при изменении ориентации - PullRequest
0 голосов
/ 30 августа 2011

Я пишу приложение, которое хранит строку в базе данных SQLite, которая представляет путь к файлу изображения в / sdcard /. У меня есть этот код в onCreate() одном из моих действий:

final Intent receivedIntent = getIntent();

String imageStr = receivedIntent.getExtras().getString("picture");
ImageView imageView = (ImageView) findViewById(R.id.pPicture);
File file = new File (imageStr);
if (file.exists()) {
   Bitmap bitmap = BitmapFactory.decodeFile(imageStr);
   imageView.setImageBitmap(bitmap);
}

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

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

Обратите внимание, что файл существует во всех случаях.

1 Ответ

3 голосов
/ 30 августа 2011

Я думаю, что ваше приложение зависает из-за OutOfMemoryException.Попробуйте переустановить растровое изображение в onDestroy():

@Override
public void onDestroy() {
    super.onDestroy();

    ImageView imageView = (ImageView) findViewById(R.id.pPicture);
    Drawable drawable = imageView.getDrawable();
    imageView.setImageDrawable(null);

    if (drawable instanceof BitmapDrawable) {
        Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
        bitmap.recycle();
        bitmap = null;
    }
}
...