여러 라이브러리와 시스템 API가 앱에 기여하는 절전 모드 해제 잠금을 획득할 수 있습니다. 이로 인해 문제를 일으킬 수 있는 앱의 절전 모드 해제 잠금을 식별하기 어려울 수 있습니다. API를 잘못 사용하면 절전 모드 해제 API를 직접 호출하지 않더라도 앱이 절전 모드 해제를 너무 오래 유지할 수 있습니다.
이 문서에는 절전 모드 해제 잠금 디버깅 도구를 사용할 때 표시될 수 있는 일반적인 절전 모드 해제 잠금 이름이 나열되어 있습니다. Android vitals의 보고서에도 이러한 이름이 표시될 수 있습니다. 경우에 따라 절전 모드 해제 잠금은 라이브러리나 시스템 API에 의해 생성되었을 수 있습니다. 다른 경우에는 도구에서 앱에 사용하는 장기간 wake lock 이름을 난독화하는 이유가 있습니다. 디버깅 도구를 사용하여 잘못된 장기간 wake lock을 식별한 다음 이 문서에서 장기간 wake lock 이름을 검색하여 문제를 일으킬 수 있는 API와 해결 방법을 확인할 수 있습니다.
이 문서에서는 절전 모드 해제 잠금이 생성될 수 있는 시나리오를 다룹니다. 각 경우에 절전 모드 해제는 다른 라이브러리나 API에 의해 생성될 수 있지만, 절전 모드 해제는 해당 API를 호출한 앱에 기여합니다.
AlarmManager
- 오디오 및 미디어
- Firebase 클라우드 메시지 (FCM)
- JobScheduler
- 위치
- WorkManager
_UNKNOWN
: 절전 모드 해제 잠금 이름이 개인 식별 정보 (PII)를 사용하는 것으로 보이는 경우 디버깅 도구에 표시됩니다.
AlarmManager
AlarmManager
는 wake lock을 획득하고 호출 앱에 이를 할당합니다. AlarmManager
는 알람이 울릴 때 wake lock을 획득하고 알람 브로드캐스트의 onReceive()
메서드 실행이 완료되면 잠금을 해제합니다.
Wake lock 이름
AlarmManager
는 이름이 *alarm*
인 절전 모드 해제 잠금을 만듭니다. (별표는 절전 모드 해제 잠금 이름의 일부이며 와일드 카드를 나타내지 않습니다.)
권장사항
알람 동작을 최적화하려면 다음 방법을 따르는 것이 좋습니다.
AlarmManager
를 사용하여 알람 예약 빈도를 최적화합니다.- 필요한 경우에만
RTC_WAKEUP
알람 (기기를 절전 모드에서 해제함)을 사용하세요. - 알람 사용을 최소화하고
onReceive()
메서드에서 긴 작업을 실행하지 마세요.
오디오 및 미디어
미디어 API는 오디오를 녹음하거나 재생할 때 절전 모드 해제 잠금을 획득할 수 있습니다. 절전 모드 해제는 호출 앱에 기여합니다.
Wake lock 이름
미디어 API는 Audio
로 시작하는 다양한 이름으로 절전 모드 해제 잠금을 획득합니다.
AudioBitPerfect
: 무손실 USB 오디오 재생에 사용됩니다.AudioDirectOut
: TV 또는 특수 기기에서 무손실 오디오 재생에 사용됩니다.AudioDup
: 블루투스 또는 USB를 통해 연결된 동안 알림 재생에 사용됩니다.AudioIn
: 마이크가 활성 상태일 때 캠코더 모드에서 오디오 캡처에 사용됩니다.AudioMix
: 일반 기기로 오디오를 재생하는 데 사용됩니다.AudioOffload
: 이 모드를 지원하는 앱의 장기 음악 전용 재생에 사용됩니다.AudioSpatial
: 서라운드 오디오를 지원하는 기기에서 다중 채널 영화 또는 음악 오디오를 재생하는 데 사용됩니다.AudioUnknown
: 다른 상황이 적용되지 않는 경우에 사용됩니다.MmapCapture
: 지연 시간이 짧은 오디오 캡처에 사용됩니다.MmapPlayback
: 게임이나 전문 오디오 애플리케이션과 같은 지연 시간이 짧은 재생에 사용됩니다.
권장사항
다음 권장사항을 참고하세요.
Audio
로 시작하는 wake lock 이름은 사용하지 마세요.- 미디어 API를 사용하는 경우 절전 모드 해제 잠금을 직접 획득할 필요가 없습니다. API가 필요한 절전 모드 해제 잠금을 획득하도록 하면 됩니다.
- 미디어 API를 사용하는 경우 더 이상 필요하지 않으면 미디어 세션을 종료합니다.
Firebase 클라우드 메시지 (FCM)
GCM은 앱에 Firebase 클라우드 메시지(FCM) 브로드캐스트를 전송하는 동안 절전 모드 해제 잠금을 획득합니다. 절전 모드 해제 잠금은 FCM 브로드캐스트 onMessageReceived()
메서드 실행이 완료되면 해제됩니다.
Wake lock 이름
GCM이 GOOGLE_C2DM
라는 이름으로 wake lock을 획득합니다.
권장사항
FCM 동작을 최적화하려면 다음 방법을 사용하는 것이 좋습니다.
- FCM 전송 빈도를 최적화합니다.
- 메시지를 실제로 즉시 전송해야 하는 경우가 아니면 우선순위가 높은 FCM을 사용하지 마세요.
onMessageReceived()
메서드를 최대한 빨리 완료합니다. 자세한 내용은 Firebase 안내를 참고하세요.
JobScheduler
JobScheduler 작업은 백그라운드에서 작업을 실행하는 동안 wake lock을 획득합니다. 절전 모드 해제는 작업자를 만든 앱에 기여합니다.
Wake lock 이름
JobScheduler에서 획득한 절전 모드 해제 잠금 이름은 실행 중인 Android 시스템 버전과 작업의 목적에 따라 다릅니다.
꺾쇠괄호로 묶인 항목은 변수입니다. 예를 들어 '<package_name>'은 앱의 패키지 이름이며 <package name>
라는 텍스트가 아닙니다. 하지만 *job*
은 별표가 포함된 문자 시퀀스 *job*
입니다. 별표는 와일드카드로 사용되지 않습니다.
Android 15 이하
사용자가 시작한 작업은 다음 패턴을 따르는 이름으로 절전 모드 해제 잠금을 만듭니다.
*job*u/@<name_space>@/<package_name>/<classname>
다른 작업에서 이 패턴을 사용합니다.
*job*/@<name_space>@/<package_name>/<classname>
Android 16 및 이후 버전
사용자가 시작한 작업은 다음 패턴을 따르는 이름으로 절전 모드 해제 잠금을 만듭니다.
*job*u/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
신속 처리 작업은 다음 패턴을 사용합니다.
*job*e/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
일반 작업은 다음 패턴을 사용합니다.
*job*r/@<name_space>@/#<trace_tag>#/<package_name>/<classname>
예
네임스페이스가 backup
이고 추적 태그가 started
인 신속 처리 작업이 있다고 가정해 보겠습니다. 패키지 이름은 com.example.app
이고 작업을 만든 클래스는 com.backup.BackupFileService
입니다.
Android 15 이하를 실행하는 기기에서 절전 모드 해제 잠금은 다음과 같이 명명됩니다.
*job*/@backup@/com.example.app/com.backup.BackupFileService
Android 16 이상을 실행하는 기기에서 절전 모드 해제 잠금은 다음과 같이 명명됩니다.
*job*e/@backup@/#started#/com.example.app/com.backup.BackupFileService
권장사항
JobScheduler 작업 사용량을 감사합니다. 특히 작업 예약 API의 배터리 사용량 최적화에 관한 안내를 따르세요.
위치
LocationManager
및 FusedLocationProviderClient
은 절전 모드 해제 잠금을 사용하여 기기 위치를 획득하고 전송합니다. 절전 모드 해제는 이러한 API를 호출한 앱에 기인합니다.
Wake lock 이름
위치 서비스는 다음 이름을 사용합니다.
CollectionLib-SigCollector
NetworkLocationLocator
NetworkLocationScanner
NlpCollectorWakeLock
NlpWakeLock
*location*
권장사항
위치 사용 최적화 예를 들어 제한 시간을 설정하거나, 위치 요청을 일괄 처리하거나, 수동적 위치 업데이트를 사용합니다.
WorkManager
WorkManager 작업자는 백그라운드에서 작업을 실행하는 동안 절전 모드 해제 잠금을 획득합니다. 절전 모드 해제는 작업자를 만든 앱에 기여합니다.
Wake lock 이름
WorkManager에서 획득한 절전 모드 해제 잠금 이름은 실행 중인 Android 시스템 버전에 따라 다릅니다.
Android 15 이하
WorkManager 작업은 다음 패턴을 따르는 이름으로 절전 모드 해제 잠금을 만듭니다.
*job*/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
Android 16 및 이후 버전
신속 처리된 작업은 다음 패턴을 따르는 이름으로 절전 모드를 생성합니다.
*job*e/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
정기 작업은 다음 패턴을 따릅니다.
*job*r/#<trace_tag>#/<package_name>/androidx.work.impl.background.systemjob.SystemJobService
기본적으로 <trace_tag>
은 작업자 이름입니다.
예
BackupFileWorker
라는 신속 처리 작업자가 있다고 가정해 보겠습니다. 패키지 이름은 com.example.app
입니다.
Android 15 이하를 실행하는 기기에서 절전 모드 해제 잠금은 다음과 같이 명명됩니다.
*job*/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
Android 16 이상을 실행하는 기기에서 절전 모드 해제 잠금은 다음과 같이 명명됩니다.
*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
권장사항
WorkManager 작업자 사용을 감사합니다. 특히 작업 예약 API의 배터리 사용량 최적화에 관한 안내를 따르세요.
_UNKNOWN
디버깅 도구에서 웨이크 락 이름에 개인 식별 정보 (PII)가 포함되어 있다고 생각하면 실제 웨이크 락 이름을 표시하지 않습니다. 대신 절전 모드 해제 잠금을 _UNKNOWN
로 라벨링합니다. 예를 들어 절전 모드 해제 잠금 이름에 이메일 주소가 포함된 경우 도구에서 이 작업을 실행할 수 있습니다.
권장사항
절전 모드 해제 잠금 이름 지정 권장사항을 따르고 절전 모드 해제 잠금 이름에 개인 식별 정보를 사용하지 마세요. 앱에 기여한 것으로 표시된 _UNKNOWN
라는 절전 모드 해제 잠금을 찾은 경우 해당 절전 모드 해제 잠금을 식별하고 다른 이름을 지정해 보세요.