Есть ли способ сжать память в Android, чтобы снизить максимальную отметку?

Обратите внимание, что у меня НЕТ утечки памяти. Мой вопрос касается более тонкой проблемы.

Недавно я написал приложение для Android, которое выполняет обработку изображений. Изображение загружается как Bitmap, затем копируется в пикселях, обрабатывается способом, использующим много памяти (подумайте о преобразованиях Фурье в представлениях с плавающей запятой и т. Д.), Затем конвертируется обратно в растровое изображение и сохраняется.

Проблема в том, что , по крайней мере, в ОС Android 2.3 общее ограничение памяти (обычно 16 МБ) складывается из java и (хранимых извне) растровых изображений,и отметка высокого уровня java не снижается (что я могу различить), даже когда память свободна (успешно GC'd), что означает, что когда я перехожу к выделению окончательного растрового изображения, мне часто «не хватает памяти» даже хотя к этому моменту я уже освободил (и сделал сборку мусора) большую часть пространства. То есть, мне никогда не нужны полные 16 МБ сразу, но для Bitmaps остается 16 МБ за вычетом MAX исторического использования кучи java (в отличие от текущего использования).

Я смотрел технический доклад одного из разработчиков Android о проблемах с памятью, и он намекнул, что эта проблема была исправлена ​​в последующих версиях ОС (они переместили память Bitmap в пространство кучи java), но в то же время большинство людей, желающих использовать мое приложение, используют версии 2.2 или 2.3. ] Короче говоря, мне интересно, уплотняется ли когда-либо куча java (фактически, дефрагментируется) так, чтобы отметка высокого уровня сжималась (и если да, то как это сделать)?

Если нет, то есть ли у кого-нибудь другое предложение, как решить эту проблему?

9
задан Brandyn 15 July 2011 в 01:41
поделиться