2010-10-23 2 views
2

У меня есть карта в моем приложении, которая показывает местоположения от Gowalla. Я использую ItemizedOverlay с простым маркером по умолчанию, но по мере того, как элементы рисуются, я меняю маркер по умолчанию с иконкой местоположения, загруженной 9 и кэшированной на диске) из Gowalla.Android - Уменьшите использование памяти в Drawmap Drawables

Проблема в том, что если на экране имеется много мест (скажем, 30), размер растровых изображений в памяти достаточно, чтобы свернуть активность. Чтобы предотвратить это, я сохраняю SoftReferences только в растровых изображениях. К сожалению, это означает, что местоположения будут мерцать между маркером по умолчанию и значком (т. Е. Загружаются значки, но тогда есть давление в памяти, поэтому они удаляются, но затем перезагружаются, потому что они на экране ...).

Когда я загружаю изображения из Gowalla, я уже масштабирую их по размеру экрана (48x48 для HDPI, поэтому 32x32 для MDPI и т. Д.), Поэтому это не огромные изображения, но я по-прежнему вынуждены выбирать между потенциальным сбоем моего приложения или миганием значков. Есть ли другой способ уменьшить память, которую использует Bitmap?

ответ

1

К сожалению, это всегда будет проблемой. Вы можете попробовать понизить выборку. Strange out of memory issue while loading an image to a Bitmap object

Возможно, вы попытаетесь сохранить изображения во временную файловую систему, чтобы каждый раз не ударять по сети. Это должно помочь много или, может быть, даже 100% с мерцанием. Соедините это с кешем кучи доступа (если вы чувствуете, что строите один), и вы, вероятно, хороши.

+0

Изображения сохраняются локально, но до сих пор мерцание. Любые предложения для библиотеки кеша для Android? – noah

+0

Не совсем. Я подумывал написать его. :) –

0

Проблема мерцания связана с использованием Soft References. Android агрессивно очищает их, и они не рекомендуются в документах. Я бы предположил, что они только в Android для совместимости. Вместо этого я должен был использовать LruCache.

Смежные вопросы