Android - Уменьшите использование памяти растровых рисунков - PullRequest
2 голосов
/ 23 октября 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

К сожалению, это всегда будет проблемой. Вы можете попробовать уменьшить выборку. Странно нехватка памяти при загрузке изображения в растровый объект

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

0 голосов
/ 12 февраля 2014

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

...