#android #image #android-drawable #android-image
#Android #изображение #android-рисование #android-изображение
Вопрос:
Заранее приношу извинения за такой простой вопрос, но это мое первое приложение, и я не могу найти четкого ответа для моей ситуации. Все изображения в моем приложении хранятся в папке для рисования, я НЕ загружаю никаких изображений из Интернета. Вся информация, с которой я сталкиваюсь, когда речь заходит о нескольких размерах изображений, похоже, относится к случаю, когда приложение извлекает изображения из Интернета.
Поэтому в настоящее время большинство изображений в моем приложении имеют один размер, настроенный для самого большого размера — xxxhdpi. Тем не менее, я понимаю, что приложение выполняет некоторую работу по «уменьшению» этих изображений для экранов размера xxhdpi.
У меня возникли сомнения по поводу этого универсального подхода. Я думаю, что, возможно, приложение, выполняющее работу по уменьшению изображения, может занять дополнительную память и негативно повлиять на производительность. Я смотрел на профилировщик Android Studio и пытался понять графический процесс, когда я смотрю на график памяти.
В более общем плане, есть ли преимущество в том, чтобы иметь изображения наименьшего размера, даже для xxxhdpi? Например, не повредит ли (с точки зрения памяти или в каком-либо другом аспекте) использование изображения .png, когда я мог бы использовать jpg более низкого качества? Опять же, просто для ясности, это как раз в том сценарии, когда приложение имеет все свои изображения в папке для рисования. В моем приложении есть опции, в которых игроки могут изменять фон игры и другие изображения, поэтому я хочу быть уверен, что оптимизирую изображения для достижения наилучшей производительности. Спасибо.
Ответ №1:
Память. Если вы загружаете растровое изображение размером x на y пикселей, в памяти, которая занимает 4*x*y
байты. Для полноэкранного изображения вы можете увеличить его до 4000*1000*4
16 МБ. Это хороший объем памяти для небольшого устройства, которое также имеет тенденцию иметь меньше оперативной памяти. Если бы вместо этого требовалось разрешение в половину разрешения, у вас было бы 2000*500*4
или 4 МБ.
Очевидно, что это зависит от размера. Чем меньше ваши изображения, тем меньше памяти тратится впустую. Я бы не стал утверждать, что вам нужно указывать каждый размер, но если вы используете большие изображения, я бы предоставил несколько. Кроме того, для всего, что не является невероятно сложным (например, значки) Вместо этого я бы рассмотрел векторные изображения (хотя это компромисс между временем процессора и памятью).
Вы упомянули png против jpg. Там нужно учитывать две вещи: размер apk и качество изображения. JPG меньше, поэтому это приведет к уменьшению размера apk. PNG без потерь, поэтому он будет иметь более высокое качество (хотя, имеет ли это значение, требует визуальной проверки человеком — это имеет меньшее значение, чем вы думаете о многих вещах). Интересно, что это не влияет на объем памяти, используемой во время выполнения, потому что оба они хранятся в несжатом растровом объекте.
Комментарии:
1. Хорошо, спасибо за ваш ответ. Я думаю, что теперь я понимаю это более ясно — независимо от размера изображения это не влияет на объем памяти, используемой во время выполнения. Это то, что меня больше всего беспокоит. Приложение не слишком большое (~85 МБ), поэтому меня не слишком беспокоит размер самого приложения, просто если бы во время воспроизведения размеры изображений влияли на использование памяти и производительность. Я все равно буду играть с изображениями меньшего размера, хотя и сохраню их там, где смогу. Спасибо.
2. Просто обратите внимание, что наличие изображения для каждой конфигурации на самом деле не влияет на размер приложения, если оно развернуто в магазине с помощью пакета приложений ( что в любом случае требуется playstore).
3. Спасибо! Я этого не знал — очень полезно!