Android: растровые изображения, SoftReferences и OOM?

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

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

Какие-нибудь советы?

5
задан ab11 3 December 2010 в 16:08
поделиться