Android setImageURI из-за ошибки памяти - PullRequest
7 голосов
/ 11 июня 2010

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

Если изображение не очень маленькое (например, 1,12 Мб 2560x1920), оно производит из памяти при изменении ориентации экрана.Я попытался getDrawable.setCallback (null), но не повезло.

Где я ошибаюсь?

public class Fullscreen extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.gc();
    setContentView(R.layout.fullscreen);
    ImageView imageView = (ImageView) findViewById(R.id.full_screen_image);
    long imageId = 2;
    imageView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + imageId));
    }
}

Ответы [ 4 ]

11 голосов
/ 08 августа 2012

Попробуйте добавить это в метод onDestroy:

ImageView imageView = (ImageView) findViewById(R.id.full_screen_image);
BitmapDrawable bd = (BitmapDrawable)imageView.getDrawable();
bd.getBitmap().recycle();
imageView.setImageBitmap(null);

Он будет перерабатывать растровое изображение, используемое в вашем ImageView.

4 голосов
/ 11 июня 2010

Потребляет меньше памяти и сокращает / изменяет размер (см. Документацию BitmapOptions # inSampleSize) изображения.

1 голос
/ 09 июля 2013

Вы также можете использовать что-то вроде этого:

        File picture = new File("path_to_image");
        if (picture.exists()) {
            ImageView imageView = (ImageView)findViewById(R.id.imageView);
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inSampleSize = 2;
            Bitmap myBitmap = BitmapFactory.decodeFile(picture.getAbsolutePath(), options);
            imageView.setImageBitmap(myBitmap);
        }

Прочтите следующую ссылку для получения дополнительной информации о параметрах BitmapFactory (особенно в inSampleSize, который контролирует степень подвыборки): http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html

1 голос
/ 11 июня 2010

Ваше приложение должно иметь утечку контекста. Это обычно причина, по которой приложение падает после нескольких изменений ориентации. Внимательно прочитайте http://android -developers.blogspot.com / 2009/01 / avoiding-memory-leaks.html .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...