전력 효율은 Wear OS에서 특히 중요합니다. Wear OS 디자인 원칙은 시계가 짧은 상호작용을 위한 소형 폼 팩터이므로 기기 전원 사용에 중점을 둡니다.
대형 휴대기기와 비교했을 때 Wear OS 기기는 배터리가 더 작으므로 배터리 소모가 더 눈에 띕니다. 또한 휴대기기와 비교했을 때 Wear OS 기기를 충전하는 데 더 많은 노력이 필요합니다. 사용자는 하루 중 다양한 간격으로 휴대기기를 충전할 수 있지만 Wear OS 기기를 충전하기 전에 신체에서 분리해야 합니다.
앱의 전력 효율을 개선하려면 다음 디자인 권장사항을 따르세요.
- 앱의 디자인은 Wear OS 폼 팩터를 잘 활용해야 합니다. 휴대기기 앱을 직접 복사해서는 안 됩니다.
- 기존 휴대기기 앱을 사용하여 특정 사용 사례를 지원합니다. 예를 들어 시계의 인터넷 및 동기화는 비용이 많이 듭니다. 휴대기기에서 많은 작업을 처리하고 Wear OS 기기에서 데이터 변경사항을 수신할 수 있는지 고려해 보세요.
- 짧은 상호작용을 위한 사용 사례를 디자인합니다.
- 사용하는 Wear OS 이벤트와 이러한 이벤트가 발생하는 빈도를 고려합니다.
가능하면 시계가 충전될 때까지 앱의 작업을 연기합니다. 이는 특히 데이터 동기화, 데이터베이스 구성과 같은 데이터 집약적인 작업에 적용됩니다.
기기가 충전 중이고 Wi-Fi 연결이 있는 경우 사용자가 앱에서 보고 싶어 하는 데이터, 이미지, 업데이트를 미리 가져오는 작업을 예약합니다.
이 전원 가이드는 시스템이 앱을 실행하는 시점과 방법, 앱의 런타임과 배터리 소모를 제한하는 방법을 이해하는 데 도움이 됩니다. 앱 로드 또는 목록 스크롤과 같은 특정 작업을 달성하는 방법에 관해 자세히 알아보려면 Wear OS의 Compose 성능 가이드와 같은 성능 관련 가이드를 참고하세요.
시간 경과에 따른 배터리 사용량 모니터링
앱을 실행하는 Wear OS 기기의 배터리 통계를 분석하려면 개발 머신의 터미널 창에 다음 명령어를 입력합니다.
adb shell dumpsys batterystats
GitHub의 라이브러리에는 배터리 통계 파서가 있습니다. 이 파서는 이 명령어와 함께 실행하는 데 유용할 수 있습니다.
배터리 수명에 영향을 미치는 이벤트
앱에 관해 구체적으로 생각하기 전에 Wear OS 기기에서 전원을 소모하는 이벤트에 관해 더 일반적으로 생각해 보는 것이 좋습니다.
다음 표는 Wear OS 앱의 여러 일반적인 이벤트에서 배터리 수명에 미치는 상대적 영향을 보여줍니다. 정확한 전원 소모는 기기마다 다릅니다.
| 이벤트 | 배터리 수명에 미치는 영향 | 완화 방법 |
|---|---|---|
| LTE 및 Wi-Fi를 포함한 네트워크 액세스 | 매우 높음 | 기기가 충전될 때까지 중요하지 않은 네트워크 액세스를 연기합니다. |
| 화면을 켜고 대화형 모드 시작 | 높음 | 사용자가 필요 이상으로 화면을 켜 두도록 유도하지 마세요. 대기 모드라고도 하는 상시 사용 모드를 사용하는 환경을 제공합니다. |
| GPS 센서 액세스 | 높음 | 가능하면 사용자가 GPS 액세스를 요청할 때까지 기다립니다. |
| CPU 사용률 높게 유지 | 높음 | Jetpack Compose 를 사용하여 흐름을 사용합니다.. |
| 심박수 센서 액세스 | 보통 | Wear OS의 건강 관리 서비스를 사용할 때와 같이 센서 API에서 콜백을 수신할 때 프로세서의 활성 시간을 사용합니다. |
| 블루투스를 통해 다른 기기 액세스 | 보통 | 세션을 짧게 유지합니다. |
| wakelock 유지 | 보통 | wakelock의 수동 생성을 줄이고
WorkManager를 사용합니다. |
화면 켜짐 시간 최소화
Wear OS 앱에서 다음 화면 사용 원칙을 따르세요.
- 화면 켜짐 잠금: 가능한 한 피합니다. 테스트하려면 시스템 설정에서 올웨이즈온 디스플레이 를 사용 중지하고 제한 시간 내에 화면이 꺼지는지 관찰합니다.
- 애니메이션: 정교한 애니메이션을 최소화하고 대신 간결한 전환에 집중하여 더 전문적인 모양을 만듭니다. 특히 장기 실행 애니메이션과 루프를 피합니다. 루프가 필요한 경우 루프 사이에 애니메이션 자체만큼 긴 일시중지를 추가합니다.
- 대기 모드에서 활성 시간: 피트니스 사용 사례와 같이 필요한 경우 상시 사용을 지원합니다. 앱에 상시 사용이 필요한 경우 대기 모드에 관한 다음 권장사항을 따르세요.
CPU 사용량 최소화
Wear OS 앱에서 다음 CPU 사용 원칙을 따르세요.
- 사용 시간을 짧게 유지합니다.
- 관련 작업을 일괄 처리하여 앱 프로세스가 유휴 상태인 시간을 최대화합니다.
wakelock 최소화
대부분의 경우 wakelock과 같이 앱이 절전 모드로 전환되지 않도록 하는 작업을 피합니다. 예를 들어 건강 및 피트니스 앱에서 장기 실행 운동에는 wakelock이 필요하지 않습니다. Wear OS에서 건강 관리 서비스를 사용할 때와 같이 센서 API에서 콜백 을 수신할 때 프로세서의 활성 시간을 사용합니다.
앱이 다음 중 하나를 실행하는 경우와 같이 wakelock을 획득해도 되는 경우가 있습니다.
- 백그라운드에서 미디어를 재생합니다.
WorkManager또는JobScheduler를 사용합니다. (시스템은 백그라운드에서 작업을 실행할 때 사용자를 대신하여 wakelock을 유지합니다.)
wake lock을 로컬에서 디버그하려면 Android 스튜디오의 Background Task
Inspector, 시스템 트레이싱 또는 adb shell dumpsys batterystats을(를) 사용하여 장기 wakelock의 개별 발생과 유지되는 wakelock의
총 개수 및 기간 요약을
검사합니다. 앱이 유지하는 wakelock의 개수와 기간을 앱의 대화형 사용 패턴과 비교합니다.
- 예상치 못한 wakelock을 확인합니다.
- 기간이 예상보다 길면 네트워크 가용성과 같은 일부 종속 항목에서 작업이 차단되는지 고려해 보세요.
앱이 비활성 상태가 되는 방식 검사
다음과 같은 주요 기기 이벤트가 발생할 때 활성 앱이 실행 중인 작업을 고려합니다.
- 화면이 꺼지고 기기가 대기 모드로 전환됩니다.
앱이 스와이프하여 닫힙니다.
앱 활동을 분석하려면 다음 섹션에 표시된 도구를 사용하세요.
전원 프로파일러
전원 프로파일러는 Android 스튜디오 메뉴에서 View > 도구 창 > Profiler를 선택하여 액세스할 수 있습니다.
- 화면이 꺼지고 기기가 대기 모드로 전환될 때 시스템 트레이스를 검사합니다.
- 계속되는 작업과 기기의 CPU 사용률 수준을 찾습니다.
Perfetto
Perfetto를 사용하면 트레이스를 기록한 다음 화면이 꺼지거나 기기가 대기 모드로 전환되거나 사용자가 앱의 활동을 닫을 때 작업을 실행하는 스레드가 있는지 앱을 검사할 수 있습니다.
앱의 중요한 이벤트를 표시하는 맞춤 이벤트를 정의합니다. 여기에는 도메인별 이벤트가 포함됩니다. 미디어 앱의 경우 재생목록 가져오기, 특정 미디어 항목 다운로드, 재생 시작, 재생 중지와 같은 작업이 포함됩니다. 이러한 이벤트를 정의하면 Perfetto에서 이러한 이벤트를 확인하고 앱의 CPU 및 전원 사용량과 타이밍을 비교할 수 있습니다.
Android CLI를 사용하여 android-profiler
기술 (android skills add android-profiler)을 설치할 수도 있습니다. 이렇게 하면 AI 에이전트가 명령줄에서
Perfetto 시스템 트레이스를 기록하고 전원 레일, wake
lock, 기기 일시중지 상태를 분석할 수 있습니다.
앱의 예약된 작업 분석
WorkManager를 사용하는 예약된 작업을 사용하면 앱에서 백그라운드 작업을 실행할 수 있습니다. 일부 백그라운드 작업은 주기적이어야 하지만 작업을 너무 자주 또는 장기간 실행하지 마세요. 기기의 배터리가 소모될 수 있습니다.
Android 스튜디오의 Background Task Inspector (View > Tool Windows >
App Inspection)를 사용하거나 adb shell dumpsys jobscheduler 및 adb shell dumpsys
batterystats를 실행하여 예약된 작업 및 worker의 실행을 검사합니다. 실행 빈도와 총 기간을 확인합니다.
- 작업이 매우 자주 실행되는 경우 이 빈도를 줄이는 것이 좋습니다.
- 총 실행 시간이 예상과 일치하고 훨씬 길지 않은지 확인합니다.
시스템 트레이스를 기록하여 타임라인에서 작업 실행과 앱의 활동을 연관시킬 수도 있습니다. 다음을 고려하세요.
- 앱의 경우 실행 기간이 적절해야 합니다.
- 앱이 실행되는 동안 작업이 발생하는지 또는 작업이 주기적인 백그라운드 작업을 나타내는지 고려합니다.
센서
Wear OS 기기에는 GPS와 같은 다양한 센서가 있습니다. 대부분의 경우
Wear OS의 건강 관리 서비스를 사용하는 대신
SensorManager와 직접 상호작용합니다. 대부분의 경우 건강 관리 서비스는 배터리 성능을 개선하기 위해 데이터를 지능적으로 일괄 처리합니다.
앱의 센서 사용량을 분석하려면 개발 머신의 터미널 창에서 다음 명령어를 실행합니다.
adb shell dumpsys sensorservice
이 명령어의 결과는 다음을 보여줍니다.
- 현재 및 이전 센서 등록
- 일괄 처리를 포함한 센서 구성(설정된 경우)
- 최근에 샘플링된 데이터
센서에서 등록 취소 테스트
앱이 예상대로 센서 데이터 가져오기를 중지하는지 확인하려면 다음 시나리오를 테스트합니다.
- 앱을 스와이프하여 닫습니다.
- 손바닥으로 화면을 탭합니다. 이렇게 하면 화면이 꺼지거나 화면이 대기 모드로 전환됩니다.
이전 섹션의 ADB 명령어를 사용하여 센서가 등록 취소된 것으로 올바르게 표시되는지 확인합니다.
데이터 레이어
Data Layer API를 사용할 때 각 전송은 일부 전원을 사용합니다. 특히 이 API를 사용하여 데이터를 전송하는 경우 앱이 절전 모드에서 해제되어 데이터를 수신해야 합니다. 이러한 이유로 이 API를 보수적으로 사용하세요.
Data Layer API 사용에 관한 몇 가지 추가 권장사항은 다음과 같습니다.
- 앱이 활성 상태가 될 때까지 기다린 후 리스너를 설정합니다
WearableListenerService. - 데이터 레이어 API를 사용하여 컴패니언 기기 또는 앱이 사용 가능한지 확인하기 위해 시계에 주기적으로 ping을 보내지 마세요. 메시지를 반복적으로 전송하면 앱이 라디오와 원격 앱 프로세스를 절전 모드에서 해제하여 기기 배터리를 필요 이상으로 소모합니다.
대신
CapabilityClient를 사용하여 기기 가용성 및 기능을 감지하거나 상태가 변경될 때만 메시지를 전송합니다. 빠른 업데이트를 구성하는 대신 상태 변경사항을 전송합니다. 이러한 상태 변경사항을 통해 Wear OS 기기는 운동 세션이 시작된 경우와 같이 로컬 데이터 계산을 실행할 수 있습니다.
UI를 업데이트하는 상태 변경사항만 전송합니다. 예를 들어 활동 화면에 '달린 거리'가 소수점 한 자리까지만 표시되는 경우 사용자가 1미터 앞으로 이동할 때마다 Wear OS에 상태 변경사항을 전송하지 마세요.
앱의 데이터 레이어 API 사용량을 분석하려면 개발 머신의 터미널 창에서 다음 명령어를 실행합니다.
adb shell dumpsys activity service WearableService
이 명령어의 결과에는 다음이 포함됩니다.
- RpcService:
MessageClient를 사용하여 호출되는 경로와 빈도를 확인할 수 있습니다. - DataService:
DataClient를 사용하여 데이터 항목이 설정되는 빈도를 확인할 수 있습니다.
건강 및 피트니스 앱
건강 및 피트니스 앱을 유지관리하는 경우 건강 관리 서비스를 사용하여 앱의 센서 사용을 최적화합니다.
ExerciseClient의 경우 시스템 트레이스, Perfetto 또는adb shell dumpsys batterystats를 사용하여 대기 모드에서 올바른 동작을 확인합니다. 앱이ExerciseUpdate데이터를 수신하기 위해 1~2분마다 절전 모드에서 해제되지 않는지 확인합니다.- 하루 종일 일반적인 건강 모니터링을 하려면
PassiveMonitoringClient을(를) 백그라운드에서 건강 및 피트니스 데이터를 모니터링하는 방법에 관한 가이드에 설명된 대로 사용합니다.
카드 및 정보 표시
앱이 카드 또는 정보 표시를 지원하는 경우 다음 권장사항을 따르세요.
- 자동 새로고침을 사용 중지하거나 새로고침 빈도를 2시간 이상으로 늘립니다.
- Firebase 클라우드 메시징 (FCM) 또는 적절하게 예약된 작업을 사용하여 데이터 업데이트를 전송합니다. 업데이트 속도가 빠르면 시스템이 작업을 실행하는 데 필요한 데이터에 사용자가 액세스할 수 있는 속도보다 빠르게 반복 작업을 예약할 수 있으므로 주의하세요.
- 사용자가 카드 또는 정보 표시와 상호작용하지 않을 때는 작업 예약하지 마세요.
- 오프라인 우선 접근 방식을 사용합니다.
- 기본 앱, 카드, 정보 표시에서 단일 데이터베이스를 공유합니다. 이렇게 하면 UI 화면에서도 데이터가 일관되게 유지됩니다.
추천 서비스
- 참고: JavaScript가 사용 중지되어 있으면 링크 텍스트가 표시됩니다.
- 백그라운드에서 위치 정보 액세스
- 알람 예약
- 고급 위젯 만들기 {:#advanced-widget}