Вопросы о BitmapFactory.Options в Android - PullRequest
1 голос
/ 05 ноября 2010

Я читал о проблемах производительности, декодирующих битовые карты, и получил сообщение OutOfMemoryError «Битовая карта превышает бюджет виртуальной машины», когда я ожидал, что не будет нехватки памяти и прочитал онлайн, что это распространенная проблема, называемая ошибкойфреймворк многими разработчиками.

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

Я читал в предыдущих постах здесь и в других местах в Интернете, что есть несколько вещейэто можно сделать с помощью BitmapFactory.Options (например, явно указав входной буфер).Но, прежде чем приступить вслепую к использованию того, что я нашел, я надеюсь, что кто-то с большим знанием этих классов сможет пролить немного больше света.

  1. В чем разница между предоставлениембайтовый массив в BitmapFactory.Options.inTempStorage и что бы BitmapFactory делал без него во время процесса кодирования?Почему это должно / должно помочь с OutOfMemoryError?Предоставляет ли он меньший буфер, чем по умолчанию, и, следовательно, имеет больше возможностей для очистки перед исчерпанием памяти?

  2. Что конкретно происходит, когда я вызываю Bitmap.recycle (), ипочему он отличается от установки растрового изображения на ноль?Примечание: выполнение одного или обоих еще не имеет значения в том, получаю ли я (и когда) ошибки OutOfMemory.

  3. Есть ли время, когда я должен явно пригласить GC вкартина с такими вопросами?Я всегда действовал (как в Java, так и в .Net), полагая, что GC, по большей части, следует доверять, чтобы решать, где и когда он делает свое дело, потому что для коллекции больше последствий, чем просто освобождение памяти(и я лично недостаточно разбираюсь в них, чтобы принять это решение).

Обновление:

Это видео отвечало большинству моихвопросы:

Google I / O 2011: управление памятью для приложений Android

http://www.youtube.com/watch?v=_CruQY55HOk

1 Ответ

1 голос
/ 05 ноября 2010

Мне показалось, что это может быть интересно: http://osdir.com/ml/AndroidDevelopers/2009-08/msg01230.html. Вы пробовали System.gc (), чтобы подтвердить, что это происходит из-за проблемы с очисткой собственной кучи?

...