Оптимизируйте использование памяти для циферблата

Чтобы обеспечить максимально возможное время автономной работы устройств Wear OS, система выполняет расчет использования памяти. В соответствии с рекомендациями по обеспечению качества приложений Wear OS циферблаты, использующие формат циферблата, имеют ограничения на объем памяти, который они могут потреблять, в зависимости от текущего состояния часов:

  • В обычном режиме циферблат не может занимать более 10 МБ памяти.
  • В интерактивном режиме циферблат не может занимать более 100 МБ памяти.

Система рассчитывает использование памяти циферблата

Чтобы вычислить размер изображения или растрового шрифта на циферблате, использующем формат циферблата, система выполняет следующие шаги:

  1. Распаковывает изображение или растровый шрифт.
  2. Проверяет изображение или растровый шрифт, чтобы определить, можно ли его оптимизировать одним из следующих способов:
    • Размер изменен, чтобы лучше соответствовать размеру дисплея.
    • Обрезано для удаления полностью прозрачных пикселей.
    • Понижение разрешения до RGB565 , если это можно сделать без потери точности.

На основе полученной ограничивающей рамки система вычисляет размер изображения или растрового шрифта в байтах по одному из следующих способов:

  • Для изображений и шрифтов, использующих RGBA8888 : \( 4 \times width \times height \)
  • Для изображений и шрифтов, использующих RGB565: \( 2 \times width \times height \)
  • Для изображений и шрифтов, использующих конфигурацию растрового изображения ALPHA_8:\( width \times height \)

Интерактивный режим

При расчете использования памяти для интерактивного режима система вычисляет сумму следующих значений:

  1. Необработанный размер любых векторных шрифтов .
  2. Предполагаемое использование системного шрифта по умолчанию.
  3. Общий размер изображений и растровых шрифтов после обрезки, изменения размера или переформатирования.

Конфигурации

Для циферблатов, содержащих конфигурации , система пытается вычислить общий размер ресурсов, используемых в различных конфигурациях. Иногда, когда существует очень большое количество комбинаций, система немного переоценивает количество ресурсов, используемых одновременно в различных конфигурациях.

Ambient-режим и слои

Для окружающего режима система предполагает, что часы визуализируются с использованием до трех полноэкранных слоев, два из которых полностью статичны:

  1. Все, что находится под элементами часов. Большая часть «тела» циферблата объединена в этот слой. Не имеет значения, сколько изображений используется для рисования этого слоя; система считает его как одно полноэкранное изображение.
  2. Любые стрелки часов, цифровой дисплей или сложности с привязками платформы, которые визуализируются динамически.
  3. Все элементы, перечисленные после стрелок часов и осложнений в исходном XML-файле.

Как правило, большая часть использования памяти в окружающем режиме приходится на растровые шрифты, особенно крупные.

Методы уменьшения использования памяти

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

Обрезка и изменение размера растровых шрифтов

Обрезайте изображения и объекты BitmapFont и изменяйте их размер в соответствии с размером дисплея.

Когда Wear OS рисует циферблат, все изображения распаковываются. Полноэкранное изображение, которое в основном пустое, может занимать 3 КБ на диске, но если оно отображается на экране с разрешением 450 x 450 пикселей, система распаковывает изображение, увеличивая размер изображения в памяти до 750 КБ или больше.

Используйте одинаковую высоту растрового шрифта.

При использовании BitmapFont все изображения символа должны иметь одинаковую высоту. Аналогично, все изображения слов должны иметь одинаковую высоту.

Используйте одинаковые размеры кадров в анимации.

Вместо перемещения изображения по циферблату обновите элементы изображения и оставьте его ограничивающую рамку в том же месте относительно циферблата. Например, если вы хотите анимировать круг на циферблате, рассмотрите возможность изменения цвета круга вместо того, чтобы катать его по циферблату.

Этот метод уменьшает размер ограничивающей рамки, которую система рассчитывает для анимации.

Дедупликация изображений

Если на вашем циферблате отображается несколько копий одного и того же изображения, включите в каталог ресурсов только одну копию этого изображения и ссылайтесь на него несколько раз.

Покажите прогресс с помощью дуг

Чтобы эмулировать индикатор выполнения, который завершается через 1 минуту или 1 час, не используйте 60 отдельных изображений. Вместо этого создайте объект Arc , содержащий выражение, управляющее его длиной, как показано в следующем фрагменте кода:

<PartDraw angle="0" width="400" height="400" name="ProgressBar"
          pivotX="0.5" pivotY="0.5 x="40" y="40">
    <Arc centerX="200" centerY="200" width="400" height="400"
         startAngle="0" endAngle="360">
        <!-- Completes a "progress loop" every minute. -->
        <Transform target="endAngle"
                   value="0 + (clamp([SECOND], 0, 60) - 0) * 6" />
        <Stroke cap="ROUND" color="#123456" thickness="10" />
    </Arc>
</PartDraw>

Чтобы отобразить прерывистую линию, например, чтобы придать вид цифровым часам в стиле ретро, ​​используйте либо свойство тире для объекта Stroke , либо наложение полупрозрачного изображения-маски.

Поместите стрелки часов и осложнения в конец исходного файла.

Узлы XML рисуются в том порядке, в котором они перечислены в исходном файле XML. Поместив стрелки часов и усложнения в конец файла, система исключает целый слой из расчета памяти в режиме окружающей среды.

Оцените использование памяти циферблата

Чтобы измерить использование памяти циферблатом, используйте инструмент оценки объема памяти, доступный в репозитории watchface на GitHub.

{% дословно %} {% дословно %} {% дословно %} {% дословно %}