Почему все мои растровые изображения увеличены на 200%?

У меня серьезные проблемы с памятью в моем приложении [1]. Чтобы исследовать это, я сделал кучу дампов своего приложения в разных состояниях. Я видел, что некоторые растровые изображения занимают огромное количество памяти. Я написал небольшую утилиту [2], которая декодирует байтовые массивы в файлы растровых изображений Windows (.bmp), чтобы я мог просматриватьрастровые изображения и сравнивать их с файлами, имеющимися у меня в res/ папка drawable.

Я обнаружил, что все мои файлы подвергаются двойной передискретизации.
Сначала я проверил самый большой из них: буфер массива байтов размером более 9 МБ в куче, который был декодирован в красивое изображение 1920x1280, в то время как исходный файл был PNG-файлом 960x640.
Я попробовал второй по величине, более 3 МБ, который после декодирования показал хорошее изображение 754x1200, исходный размер был... угадайте, что? Хороший jpg файл 377x600.

Что дает?

Я включил аппаратное ускорение в своем файле манифеста Android (хотя я не уверен, что мне это действительно нужно, я просто использую некоторые базовые представления и действия).
У меня Android 4.0.2 на GSM Galaxy Nexus (якью). Я получаю отзывы от своих тестировщиков, что проблема присутствует на их Nexus S версии 4.0.3, хотя я еще не мог проверить их дампы кучи.

Здесь я пытаюсь сэкономить память, если Android удваивает все, неудивительно, что приложение быстро падает, потому что использование кучи становится слишком большим (около 64 МБ в моем случае). Я надеюсь, что есть причина и способ обойти это.

Ссылки:

  1. OutOfMemoryError при загрузке действий
  2. Как на самом деле увидеть растровое изображение, взятое из дампа кучи Android

6
задан Community 23 May 2017 в 11:55
поделиться