Подтвердить что ты не робот

Почему я никогда не использовал параметр BitmapFactory inPurgeable?

Android BitmapFactory.Options.inPurgeable был рекомендован в разных местах как способ избежать исключений OutOfMemory в Android 2.x и более ранних версиях (Android 3.1 исправляет это).

Если inPurgeable настолько велико, почему я никогда не хочу его использовать? Документация кажется очень легкой в ​​деталях о том, что делает этот параметр:

Если для этого параметра установлено значение true, то результирующая растровая карта будет выделять свои пиксели таким образом, чтобы их можно было очистить, если системе необходимо восстановить память. В этом случае, когда нужно снова получить доступ к пикселям (например, растровое изображение вычерчено, вызывается getPixels()), они будут автоматически перекодированы

Кажется замечательным. Какой улов?

4b9b3361

Ответ 2

Если вы читаете свои растровые изображения из файловой системы, используя этот флаг, вы можете заставить Android открыть файл (по крайней мере в 4.0.4), чтобы перечитать его. После чтения более 1024 файлов вы достигнете предела открытых файлов и получите сообщение "Слишком много открытых файлов".

Вы можете наблюдать beahavior с помощью команды lsof с корневого терминала и просматривать все открытые файлы.

Ответ 3

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

Если у вас больше нет доступа к закодированным данным, это может быть проблемой? Что, если вы были живыми растровыми изображениями декодирования из потокового ByteArray, и ваше приложение просто решает вернуть память, не приведет ли это к тому, что ваш Bitmap потеряет эти пиксели?

Ответ 4

Этот флаг в настоящее время полностью игнорируется, что catch.


Обновление от @slodge: пожалуйста, любой, кто читает это и видит в нем правильный ответ, также читает комментарии - "Этот флаг в настоящий момент полностью игнорируется" является истинным только в некоторых случаях - в других случаях (например, при использовании decodeByteArray на загруженные данные), то этот флаг не игнорируется и очень, очень полезен