Android: растровые изображения, SoftReferences и OOMs? - PullRequest
5 голосов
/ 03 декабря 2010

У меня есть ряд видов в вертикальной LinearLayout. Каждый вид генерирует и рисует растровое изображение при прокрутке до. Из соображений производительности я бы предпочел не генерировать растровое изображение каждый раз, когда вызывается onDraw (), но из соображений памяти я не могу сохранять жесткие ссылки на растровые изображения. Я мог бы использовать совет относительно стратегии, которую я должен принять.

Я уже пробовал очевидный путь: генерировать растровое изображение, а затем оборачивать его с помощью SoftReference. Это не удалось по двум причинам. 1. Ссылки собираются гораздо охотнее, чем я ожидал. 2. Я все еще получаю ООМ! Это шокирует, потому что ни одно растровое изображение не является особенно большим, поэтому одно представление не должно вызывать OOM, заставляя меня предположить, что OOM происходит, потому что нарушающие SoftReference не получили шанс на освобождение. Кроме того, OOM возникает, когда мое приложение имеет выделенный размер кучи 6 МБ (согласно представлению DDMS), и я ожидаю, что оно увеличится до 16 МБ, прежде чем выдавать OOM.

Любой совет?

1 Ответ

11 голосов
/ 03 декабря 2010

Проблема в том, что растровые изображения используют финализаторы, поэтому может потребоваться пара проходов GC, прежде чем собственно память будет освобождена.Это то, над чем мы работаем.

...