Intereting Posts
Автоматический прокрутка до горизонтальногоScrollView Панель инструментов вызова для каждой операции Android: ListView с EditTexts помещает фокус и IME Приложение перезагружается, если выбрать приложение из последних приложений только в том случае, когда активность начинается с уведомления Android pick намерение Не удалось исключить действие SDK на Google Диске Android, как сделать EditText редактируемым внутри ListView Не удалось выполнить задачу «GenerateJavaStubs» Как создать счетчик даты на Android Android @NonNull полезность Приложение не настроено: это приложение все еще находится в режиме разработки Можно ли использовать C / C ++ для кода кросс-платформенного IOS / Android в этом случае? Каков код для получения обновленного токена Facebook в приложении для Android? Может ли кто-нибудь объяснить мне волшебство за FindViewById (1) или FindViewById (2)? Как создать пользовательскую функцию в SQLite?

Загрузка ресурсов изображения в виде RGB 565

Я пытаюсь снизить использование памяти в своем приложении, и я заметил, что большинство из них вызвано фонами деятельности: в XHDPI, 720 * 1280 * 4 = 3,6 Мбайт каждый, и Android, похоже, не выпускает их как Как только они больше не используются.

Есть ли способ сказать Android загрузить определенные изображения ресурсов как RGB 565 вместо RGB 8888 , чтобы сохранить некоторую память на этих больших изображениях без альфа-канала?

Я знаю, что это можно сделать программно, но мне было интересно, можно ли это сделать также с изображениями и фонами, используемыми в макетах действий или с помощью setBackgroundResource() .

Вы можете сделать это следующим образом:

 protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.high_scores); BitmapFactory.Options opts = new BitmapFactory.Options(); opts.inPreferredConfig = Config.RGB_565; BitmapDrawable highScoresBg = BitmapFactory.decodeResource(getResources(), R.drawable.achievements, opts); findViewById(R.id.high_scores_root).setBackgroundDrawable(highScoresBg); 

Пиксели вашего изображения будут сохранены на 2 байта, а не 4 при использовании ARGB_8888. 50% сохраненная память, но, конечно, менее качественная.

В этой статье говорится, что на Android <2.3 изображения по умолчанию находятся в RGB_565. Однако, если изображение имеет альфа-канал (например, PNG), он будет загружен в ARGB_8888. На Android> = 2.3 все изображения загружаются по умолчанию в ARGB_8888.

В настоящее время невозможно указать ресурс RGB_565.

Лучшее, что вы могли бы сделать, – предоставить следующий файл данных, который отображает ваши файлы изображений в нужные форматы в памяти. Во время загрузки вы можете проверить каждый идентификатор ресурса на файл, чтобы определить, хотите ли вы установить параметры BitmapFactory на 565 или 8888.

Подобный процесс используется большинством приложений, которые вынимают данные изображения. Например, некоторые изображения JPG, которые имеют малую разрешающую способность, считаются эскизами и загружаются в память с использованием пути 565. Когда полноэкранным JPG разрешено загружать в память как 8888.

В принципе, вам всегда потребуется определенный уровень логики в вашем приложении, чтобы соответственно установить BitmapOptions.