모바일 사용자 환경에서 가장 중요한 단 한 가지 측면은 배터리 수명입니다. 전력이 바닥난 기기는 제 기능을 전혀 하지 못합니다. 따라서 앱 실행과 관련해 배터리 수명을 최대한 주의 깊게 살피는 것이 매우 중요합니다.
앱이 항상 전력을 적게 소모하도록 하기 위해 주의해야 할 중요 사항은 다음 세 가지입니다.
- 앱을 Lazy First 상태로 만듭니다.
- 앱의 배터리 소모를 관리할 수 있는 플랫폼 기능을 활용합니다.
- 배터리 소모 원인을 파악할 수 있는 도구를 사용합니다.
Lazy First
앱을 Lazy First 상태로 만드는 것은 유난히 배터리 사용량이 많은 작업을 줄이고 최적화하는 방법을 찾는 것을 뜻합니다. Lazy First 설계에 도움이 되는 핵심 질문은 다음과 같습니다.
- 줄이기: 앱에서 제거할 수 있는 중복 작업이 있나요? 예를 들어 데이터를 다시 다운로드하기 위해 무선 기능을 켜는 대신 다운로드한 데이터를 캐시할 수 있나요?
- 연기: 앱에서 작업을 즉시 실행해야 하나요? 예를 들어 기기가 충전될 때까지 기다렸다가 데이터를 클라우드에 백업할 수 있나요?
- 병합: 기기를 여러 차례 활성 상태로 전환하는 대신 작업을 일괄 처리할 수 있나요? 예를 들어 수십 개의 앱이 메시지를 보낼 때마다 각자 무선 기능을 켜야 하나요? 그 대신 무선을 한 번만 켜서 메시지를 전송할 수 있나요?
CPU, 무선, 화면 사용과 관련해 이러한 질문을 해야 합니다. Lazy First 설계는 이같은 배터리 낭비 요인을 억제하는 좋은 방법입니다.
이러한 작업 효율성을 비롯해 다양한 측면의 효율성을 높일 수 있도록 Android 플랫폼에서는 여러 가지 배터리 수명 극대화 기능을 제공합니다.
플랫폼 기능
일반적으로 Android 플랫폼에서는 앱의 배터리 사용 최적화를 지원하기 위해 두 가지 카테고리의 도움말을 제공합니다. 먼저, 앱에서 구현할 수 있는 여러 API를 제공합니다. 이러한 API에 관한 자세한 내용은 백그라운드 처리 가이드를 참조하세요.
플랫폼에는 배터리 수명 보존에 도움이 되는 내부 메커니즘도 있습니다. 프로그래밍 방식으로 구현하는 API는 아니지만 앱에서 활용할 수 있도록 이 API에 관해 알고 있어야 합니다. 자세한 내용은 다음을 참조하세요.
- 잠자기 및 앱 대기
- 앱 대기 버킷. 시스템에서는 앱이 CPU나 배터리 같은 기기 리소스에 액세스할 때 사용자의 사용 패턴에 따라 이를 제한합니다.
- 백그라운드 제한. 앱이 비정상적인 동작을 보이면 시스템에서는 사용자에게 이 앱의 시스템 리소스 액세스를 제한하라는 메시지를 표시합니다.
- 전력 관리 제한사항. 특정 조건에서 앱에 부과할 수 있는 전력 제한사항 목록을 참조하세요.
- 테스트 및 문제해결
또한 Android 9(API 레벨 28)에서는 절전 모드를 크게 개선하였습니다. 기기 제조업체에서는 부과된 제한사항을 확인합니다. 예를 들어 AOSP 빌드에서 시스템은 다음 제한사항을 적용합니다.
- 시스템에서는 앱이 유휴 상태가 되기를 기다리지 않고 앱을 더 적극적으로 앱 대기 모드로 전환합니다.
- 백그라운드 실행 제한은 대상 API 수준에 관계없이 모든 앱에 적용됩니다.
- 화면이 꺼져 있으면 위치 서비스가 사용 중지될 수 있습니다.
- 백그라운드 앱에는 네트워크 액세스 권한이 없습니다.
전력 관리 제한사항에서 기기별 전력 최적화에 관한 세부정보를 확인하세요.
절전 모드가 작동 중일 때 앱을 테스트하는 것이 좋습니다. 기기의 설정 > 절전 모드 화면에서 절전 모드를 수동으로 사용 설정할 수 있습니다.
도구
플랫폼에 사용할 수 있는 도구로 앱에서 가장 많은 전력을 소비하는 부분을 찾아내면 이러한 기능을 더 효과적으로 활용할 수 있습니다. 타겟팅할 부분을 찾는 것만으로도 성공적인 최적화에 성큼 다가선 것입니다.
GPU 렌더링 프로파일링 및 Battery Historian과 같은 Android 도구를 사용하면 최적화할 수 있는 영역을 찾아 배터리 수명을 늘리는 데 도움이 됩니다. 이러한 도구를 활용하여 Lazy First 원칙을 적용할 수 있는 영역을 타겟팅합니다.