Использование растровой памяти Android - PullRequest
0 голосов
/ 21 января 2012

Я запускаю стек фильтров изображений и, похоже, у меня возникают проблемы с памятью.

В начале обработки изображения я использую столько памяти:

GC_FOR_MALLOC freed 3K, 45% free 3237K/5831K, external 47586K/49634K, paused 17ms

В конце я использую это много (после того, как вся обработка закончена):

GC_EXTERNAL_ALLOC freed 5K, 16% free 16056K/18951K, external 51430K/52196K, paused 23ms

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

someBitmap.recycle();
someBitmap = null;

Есть ли что-нибудь еще, что я должен с ними сделать? Должен ли я сделать какую-либо очистку используемого холста?

Также мои фильтры являются объектами, такими как:

BoxBlurFilter blurFilter = new BoxBlurFilter();

Что-нибудь, что я должен сделать, чтобы освободить их? В памяти iOS выделяется «новое», отвечаю за бесплатное.

Извините за тривиальные вопросы по управлению памятью, но я новичок в разработке для Android, и все сильно отличается от iOS.

Спасибо!

РЕДАКТИРОВАТЬ 2, я удалил полный код фильтра.

1 Ответ

0 голосов
/ 21 января 2012

Таким образом, после установки экземпляров фильтра на ноль и всех байтовых массивов на ноль (в приведенном выше коде и в объектах фильтра) у меня теперь примерно такая же куча размера, что и до запуска фильтра:

GC_EXPLICIT freed 5126K, 77% free 3243K/13703K, external 51430K/53478K, paused 18ms

Это означает, что он использовался с 16 МБ до 3,2 МБ. Гораздо лучше!

Итак, я думаю, что ответ на мой вопрос - убедитесь, что вы установили все в null, если хотите, чтобы это было освобождено.

...