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

Wear OS 기기의 배터리 수명을 최대한 늘리기 위해 시스템은 메모리 사용량 계산을 실행합니다. Wear OS 앱 품질 가이드라인에 따라 워치 페이스 형식을 사용하는 시계 화면은 시계의 현재 상태에 따라 사용할 수 있는 메모리 양이 제한됩니다.

  • 대기 모드에서 시계 화면은 메모리를 10MB 이상 사용할 수 없습니다.
  • 대화형 모드에서 시계 화면은 메모리를 100MB 이상 사용할 수 없습니다.

시스템이 시계 화면의 메모리 사용량을 계산함

워치 페이스 형식을 사용하는 시계 화면 내에서 이미지 또는 비트맵 글꼴이 차지하는 크기를 계산하기 위해 시스템은 다음 단계를 완료합니다.

  1. 이미지 또는 비트맵 글꼴의 압축을 풉니다.
  2. 이미지 또는 비트맵 글꼴을 검사하여 다음 방법 중 하나로 최적화할 수 있는지 확인합니다.
    • 디스플레이 크기에 더 잘 맞도록 크기를 조절했습니다.
    • 완전히 투명한 픽셀을 삭제하도록 잘림
    • 화질 손실 없이 RGB565로 다운샘플링합니다.

결과 경계 상자를 기반으로 시스템은 이미지 또는 비트맵 글꼴의 크기를 바이트 단위로 다음 중 하나로 계산합니다.

  • RGBA8888을 사용하는 이미지 및 글꼴: \( 4 \times width \times height \)
  • RGB565를 사용하는 이미지 및 글꼴의 경우: \( 2 \times width \times height \)
  • ALPHA_8 비트맵 구성을 사용하는 이미지와 글꼴의 경우: \( width \times height \)

대화형 모드

대화형 모드의 메모리 사용량을 계산할 때 시스템은 다음의 합계를 계산합니다.

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

구성

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

대기 모드 및 레이어

대기 모드의 경우 시스템은 시계가 최대 3개의 전체 화면 레이어를 사용하여 렌더링된다고 가정하며, 이 중 2개는 완전히 정적입니다.

  1. 시계 요소 아래에 모든 것이 있습니다. 시계 화면의 '몸체' 대부분이 이 레이어에 합성됩니다. 이 레이어를 그리는데 사용되는 이미지의 수는 중요하지 않습니다. 시스템은 이를 전체 화면 이미지 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
  • 직사각형