Эффективное отображение растровых изображений

Зависимости и условия

Попробуйте

Скачать образец

DisplayingBitmaps.zip

Видео

DevBytes: Распределение памяти под растровые изображения

Видео

DevBytes: Создание красивых приложений - Часть 4 - Настройка производительности

Узнайте, как использовать общие методы для обработки и загрузки Bitmap объектов так, чтобы держать компоненты вашего пользовательского интерфейса отзывчивыми и позволить избежать превышения лимита памяти приложением. Если вы не будете осторожны, растровые изображения могут быстро израсходовать имеющийся объем памяти, ведущий к краху приложения из-за страшного исключения:
java.lang.OutofMemoryError: bitmap size exceeds VM budget.

Есть ряд причин, почему загрузка растровых изображений в вашем Android приложении является не простой задачей:

  • Мобильные устройства, как правило, имеют ограниченные системные ресурсы. Устройства Android могут иметь ограничение до 16 Мб памяти, доступной для одного приложения. Документ Определения Совместимости Android (CDD), Раздел 3.7. Совместимость виртуальной машины предоставляет требуемый минимум памяти приложения для различных размеров и плотностей экранов. Приложения должны быть оптимизированы для работы в рамках этого минимального предела памяти. Однако, имейте в виду, многие устройства настроены с более высоким пределом памяти.
  • Растровые изображения занимают много памяти, особенно для изображений таких как фотографии. Например, камера на Galaxy Nexus фотографирует до 2592x1936 пикселей (5 Мега-пикселей). Если конфигурация растрового изображения использует ARGB_8888 (по умолчанию начиная с Android 2.3 далее), то загрузка изображения в память занимает около 19Mb памяти (2592 * 1936 * 4 байта), тем самым исчерпав сразу лимит приложения на некоторых устройствах.
  • Пользовательский интерфейс Android приложений, часто требует загрузки сразу нескольких растровых изображений. Такие компоненты, как ListView, GridView и ViewPager обычно включают в себя несколько растровых изображений, отображаемых на экране одновременно, и многими другими за экраном потенциально готовым показаться по движению пальца.

Уроки

Эффективная загрузка больших растровых изображений
Этот урок проведет вас через декодирования больших растровых изображений, не превышая предел памяти приложения.
Обработка растровых изображений вне потока пользовательского интерфейса
Обработка растровых изображений (изменение размера, загрузка из удаленного источника, и т.д.) никогда не должна происходить в основном потоке пользовательского интерфейса. Этот урок проведет вас через обработку растровых изображений в фоновом потоке, используя AsyncTask , и объяснит, как обрабатывать проблемы параллелизма.
Кэширование растровых изображений
Этот урок проведет вас через использование кэша памяти и дискового кэша для растровых изображений для улучшения быстродействия и плавности пользовательского интерфейса при загрузке нескольких растровых изображений.
Управление памятью растровых изображений
Этот урок объясняет, как управлять памятью растровых изображений для увеличения производительности вашего приложения.
Отображение изображений в вашем пользовательском интерфейсе
Этот урок собирает все вместе, показывая вам, как загрузить несколько растровых изображений в компоненты, такие как ViewPager и GridView , используя фоновый поток и кэш растровых изображений.