Растровое изображение OutOfMemory при нескольких изменениях экрана - PullRequest
2 голосов
/ 10 августа 2010

У меня есть растровое изображение, которое я загружаю с SD-карты, позволяя пользователю выбрать изображение для отображения. После создания растрового изображения я устанавливаю растровое изображение в ImageView:

mBitmap = Bitmap.createBitmap(Media.getBitmap(this.getContentResolver(), mPictureUri));
mImageView.setImageBitmap(mBitmap);

Это отлично работает. Но если я меняю ориентацию экрана с книжной на альбомную и возвращаюсь несколько раз, я всегда получаю исключение OutOfMemory.

В onPause я вызываю mBitmap.recycle (), а затем в onResume я снова вызываю приведенный выше код, чтобы создать растровое изображение и установить ImageView. Так как я каждый раз перерабатываю образ, как я могу получить ошибку OutOfMemory?

В любом случае, поскольку это не удалось, я нашел сообщение, в котором говорится, что он пытается использовать onRetainNonConfigurationInstance () и getLastNonConfigurationInstance (). См. Сообщение Сохранение кэша при повороте устройства . Я изменил свой код для работы таким образом, и я все еще получаю ошибку. При изменении кода у меня был вызов getLastNonConfigurationInstance () в onCreate (), и я удалил весь код в onPause и onResume.

Может кто-нибудь сказать мне, в чем проблема, или предоставить какой-либо способ просто загрузить изображение, а затем иметь возможность приостановить и возобновить действие, не исчерпав память? Спасибо.

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Попробуйте уменьшить размер вашего растрового изображения.Насколько это велико?Используйте BitmapFactory.options.Также вместо использования «этого экземпляра».См. Статью об утечках памяти: http://android -developers.blogspot.com / 2009/01 / избежать-memory-leaks.html

0 голосов
/ 11 августа 2010

Утечки памяти могут быть связаны с удержанием экземпляра контекста, который, в свою очередь, содержит ссылки на все объекты из Activity перед его уничтожением. Статья объясняет это лучше.

Вы должны уменьшить размер изображений, потому что на приложение приходится 16 МБ. Если у вас есть большие воссозданные растровые изображения, они могут накопиться до 16 МБ до того, как будут собраны сборщики мусора или при утечках памяти.

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