시계 화면의 메모리 사용량 최적화

Wear OS는 메모리 사용량을 추적하여 배터리 수명을 개선합니다. 워치 페이스 형식을 사용하는 시계 화면에는 Wear OS 앱 품질 가이드라인에 따라 메모리 제한이 있습니다.

  • 대기 모드: 최대 메모리 사용량 10MB
  • 대화형 모드: 최대 메모리 사용량 100MB

메모리 사용량 계산

워치 페이스 형식을 사용하여 시계 화면의 이미지 또는 비트맵 글꼴의 메모리 사용량을 계산하기 위해 시스템은 다음을 실행합니다.

  1. 이미지 또는 글꼴의 압축을 풉니다.
  2. 다음 최적화가 적용되는지 확인합니다.
    • 화면에 더 잘 맞게 크기 조절
    • 투명 픽셀 자르기
    • 화질 손실 없이 RGB565로 다운샘플링

결과 경계 상자를 기반으로 크기는 다음과 같이 계산됩니다.

  • RGBA8888을 사용하는 이미지 및 글꼴의 경우: 4 x 너비 x 높이
  • RGB565를 사용하는 이미지 및 글꼴의 경우: 2 x 너비 x 높이
  • ALPHA_8 비트맵 구성을 사용하는 이미지 및 글꼴의 경우: 너비 x 높이

대화형 모드

대화형 모드의 메모리 사용량을 계산하기 위해 시스템은 다음 값을 합산합니다.

  1. 처리되지 않은 벡터 글꼴의 크기입니다.
  2. 시스템 기본 글꼴의 예상 사용량
  3. 자르기, 크기 조절, 형식 재설정이 적용된 후 이미지 및 비트맵 글꼴의 총 크기입니다.

구성

구성이 있는 시계 화면의 경우 시스템은 다양한 구성에서 시계 화면 리소스의 총 크기를 계산하려고 시도합니다. 조합 수가 매우 많으면 시스템에서 동시에 사용되는 리소스 수를 과대 추정할 수 있습니다.

대기 모드 및 레이어

시스템은 화면 보호 모드에서 최대 3개의 전체 화면 레이어를 사용하며 그중 2개는 정적이라고 가정합니다. 레이어는 다음과 같습니다.

  1. 시계 화면 배경입니다. 시스템은 배경이 구성하는 이미지 수와 관계없이 이를 하나의 이미지로 취급합니다.
  2. 시곗바늘, 디지털 디스플레이, 동적 요소와 같은 움직이는 부분
  3. 소스 XML 파일의 나머지 요소

대형 비트맵 글꼴은 대기 모드에서 가장 많은 메모리를 사용하는 경우가 많습니다.

메모리 사용량을 줄이는 방법

다음 최적화를 사용하여 메모리 사용량을 줄이세요.

비트맵 글꼴 자르기 및 크기 조절

이미지와 BitmapFont 객체를 디스플레이 크기에 맞게 자릅니다.

Wear OS는 모든 이미지가 압축 해제된 시계 화면을 그립니다. 거의 비어 있는 전체 화면 이미지는 디스크에서 3KB를 사용할 수 있지만 450픽셀 x 450픽셀 화면에서는 750KB 이상을 사용할 수 있습니다.

일관된 비트맵 글꼴 높이 사용

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에 나열된 순서대로 그려집니다. 시계 바늘과 정보 표시를 마지막에 배치하면 시스템이 대기 모드 메모리 계산에서 전체 레이어를 제거할 수 있습니다.

시계 화면의 메모리 사용량 평가

시계 화면의 메모리 사용량을 측정하려면 GitHub의 watchface 저장소에 있는 메모리 사용량 평가 도구를 사용하세요.

  • 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
  • Arc
  • 직사각형