Battery Historian 도구를 사용하면 시간 경과에 따른 기기의 배터리 소모량을 알 수 있습니다. 이 도구는 시스템 전체 수준에서 시스템 로그의 전력 관련 이벤트를 HTML로 표시합니다. 또한 앱별 수준에서 배터리를 소모하는 앱 동작을 파악할 수 있는 다양한 데이터를 제공합니다.
이 문서에서는 Battery Historian을 사용하여 배터리 소모 패턴을 알아볼 수 있는 몇 가지 방법을 설명합니다. 먼저 Battery Historian에서 보고하는 시스템 전체 데이터를 읽는 방법을 설명합니다. 그런 다음, Battery Historian을 사용하여 배터리 소모와 관련된 앱의 동작을 진단하고 문제를 해결하는 방법을 제시합니다. 마지막으로 Battery Historian이 특히 유용한 시나리오에 관한 몇 가지 팁을 제공합니다.
시스템 전체 뷰 사용
Battery Historian 도구는 다양한 앱 및 시스템 동작을 시간 경과에 따른 배터리 소모량과의 상관관계와 함께 시스템 전체 수준에서 시각화합니다. 그림 1과 같이 이 뷰는 앱에서 전력 사용과 관련된 문제를 진단하고 파악하는 데 도움이 됩니다.
![Battery Historian에서 전력 소비에 영향을 미치는 시스템 전체 이벤트를 나타낸 화면](https://developer.android.google.cn/static/topic/performance/images/generic-timeline.png?authuser=3&hl=ko)
이 그림에서 특히 중요한 것은 y축에서 측정된 배터리 수준을 나타내는 가로 방향의 검은색 하향 추세선입니다. 예를 들어 배터리 수준 선의 시작 부분인 오전 6시 50분쯤에는 배터리 수준이 비교적 급격히 감소하는 것으로 시각화되어 있습니다.
그림 2는 화면에서 이 부분을 확대한 것입니다.
![대략 오전 6시 50분에서 오전 7시 20분까지의 Battery Historian 타임라인을 확대한 모습](https://developer.android.google.cn/static/topic/performance/images/s-generic-closeup.png?authuser=3&hl=ko)
배터리 수준 선의 맨 처음에 배터리가 급격히 감소한 부분에서는 CPU가 실행 중이고, 앱에 wakelock이 발생하였으며, 화면이 켜지는 세 가지 이벤트가 발생했음을 표시합니다. 이런 식으로 Battery Historian은 배터리 소모가 많을 때 발생하는 이벤트를 파악하는 데 도움이 됩니다. 그러면 앱에서 이러한 동작을 타겟팅하고 이와 관련해 최적화 작업이 가능한지 알아볼 수 있습니다.
시스템 전체를 시각화한 화면에서 다른 단서를 얻을 수도 있습니다. 예를 들어 무선 통신을 자주 껐다 켜는 추세를 보인다면 JobScheduler나 Firebase Job Dispatcher 같은 지능형 예약 API를 통해 이 동작을 최적화할 수 있습니다.
다음 섹션에서는 내 앱과 관련된 동작 및 이벤트를 조사하는 방법을 설명합니다.
앱별 데이터 보기
Battery Historian에서는 시스템 전체 뷰에서 제공하는 매크로 수준 데이터 외에도 기기에서 실행되는 각 앱의 데이터를 표 등으로 시각화하여 제공합니다. 표 형식 데이터에는 다음과 같은 것이 있습니다.
- 기기에서 실행되는 앱의 예상 전력 사용량
- 네트워크 정보
- Wakelock
- 서비스
- 프로세스 정보
표에는 앱에 관한 두 가지 차원의 데이터가 표시됩니다. 첫째, 앱의 전력 사용량을 다른 앱과 비교한 순위를 조회할 수 있습니다. Tables에서 Device's Power Estimates 표를 클릭하면 됩니다. 이 예에서는 Pug Power라는 가상 앱을 살펴봅니다.
![전력을 가장 많이 소모하는 앱 알아보기](https://developer.android.google.cn/static/topic/performance/images/app-rankings.png?authuser=3&hl=ko)
그림 3의 표는 Pug Power가 이 기기의 배터리 전력 소비량에서 9번째로 큰 앱이며 OS에 속하지 않지만 세 번째로 큰 앱임을 보여줍니다. 이 데이터에 따르면 이 앱을 더 자세히 조사해야 함을 알 수 있습니다.
특정 앱의 데이터를 조회하려면 화면 왼쪽에 있는 App Selection의 드롭다운 메뉴 두 개 중 아래쪽 메뉴에 패키지 이름을 입력하세요.
![데이터를 조회할 특정 앱 입력](https://developer.android.google.cn/static/topic/performance/images/dropdown.png?authuser=3&hl=ko)
특정 앱을 선택하면 다음 데이터 시각화 카테고리가 변경되어 시스템 전체 데이터가 아닌 앱별 데이터가 표시됩니다.
- SyncManager
- 포그라운드 프로세스
- 사용자 공간 Wakelock
- 인기 앱
- JobScheduler
- 활동 관리자 프로세스
SyncManager 및 JobScheduler 시각화 화면을 통해 앱에서 필요한 것보다 더 자주 동기화 및 기타 작업을 실행하는지 여부를 즉시 확인할 수 있습니다. 이 과정에서 앱의 동작을 최적화하여 배터리 성능을 개선할 수 있는지 여부도 빠르게 파악할 수 있습니다.
또 하나의 앱별 시각화 데이터인 사용자 공간 Wakelock도 얻을 수 있습니다. 이 정보를 버그 신고에 포함하려면 터미널 창에 다음 명령어를 입력하세요.
$ adb shell dumpsys batterystats --enable full-wake-history
그림 5 및 6에서는 Pug Power에 관한 데이터를 보여줍니다. 그림 5는 앱별 데이터를 시각화한 것이고 그림 6은 이에 상응하는 표 형식 데이터입니다.
![가상 앱 Pug Power 관련 데이터의 시각화](https://developer.android.google.cn/static/topic/performance/images/pug-visualization.png?authuser=3&hl=ko)
![가상 앱 Pug Power의 표 형식 데이터](https://developer.android.google.cn/static/topic/performance/images/pugspecificdata.png?authuser=3&hl=ko)
시각화된 것을 봐도 금방 확연히 이해되는 내용은 없습니다. JobScheduler 행은 앱에 예약된 작업이 없음을 나타냅니다. SyncManager 행은 앱이 동기화를 실행하지 않았음을 나타냅니다.
그러나 표 형식 데이터의 Wakelocks 세그먼트를 살펴보면 Pug Power로 인해 총 1시간 이상의 wakelock이 발생함을 알 수 있습니다. 이처럼 비정상적이고 비용이 많이 드는 동작이 앱의 전력 소비 수준이 높은 이유일 수 있습니다. 개발자는 이 정보를 참고하여 최적화하면 큰 도움이 될 영역을 타겟팅할 수 있습니다. 이 사례에서 앱의 wakelock 시간이 길어지는 이유는 무엇이고 개발자는 어떤 방법으로 이 동작을 개선할 수 있을까요?
Battery Historian이 도움이 되는 기타 사례
이외에도 Battery Historian을 사용하여 배터리 동작 개선 가능성을 진단할 수 있는 사례가 많습니다. 예를 들어 Battery Historian에서 앱이 다음과 같은 상태인지 파악할 수 있습니다.
- wakeup 알람을 너무 자주 실행(10초 이하 간격)
- GPS 잠금 상태 계속 유지
- 30초 이하 간격으로 작업 예약
- 30초 이하 간격으로 동기화 예약
- 무선 라디오를 예상보다 자주 사용