여러 라이브러리와 시스템 API가 앱에 기여하는 절전 모드 해제 잠금을 획득할 수 있습니다. 이로 인해 문제를 일으킬 수 있는 앱의 절전 모드 해제 잠금을 식별하기 어려울 수 있습니다. API를 잘못 사용하면 절전 모드 해제 API를 직접 호출하지 않더라도 앱이 절전 모드 해제를 너무 오래 유지할 수 있습니다.
다른 API에서 절전 모드 해제 잠금을 획득하는 시나리오에서는 절전 모드 해제 잠금을 수동으로 획득하지 않아야 합니다.
이 문서에는 절전 모드 해제 잠금 디버깅 도구를 사용할 때 표시될 수 있는 일반적인 절전 모드 해제 잠금 이름이 나열되어 있습니다. 중요한 정보의 보고서에도 이러한 이름이 표시될 수 있습니다. 경우에 따라 라이브러리나 시스템 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()
메서드 실행이 완료되면 lock을 해제합니다.
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
로 시작하는 절전 모드 해제 잠금 이름은 사용하지 마세요.- 미디어 API를 사용하는 경우 절전 모드 해제 잠금을 직접 획득할 필요가 없습니다. API가 필요한 절전 모드 해제 잠금을 획득하도록 하면 됩니다.
- 미디어 API를 사용하는 경우 더 이상 필요하지 않으면 미디어 세션을 종료합니다.
블루투스
블루투스 작업이 발생하는 동안 플랫폼 블루투스 API는 애플리케이션에 기인하는 절전 모드 해제 잠금을 보유하지 않습니다. 블루투스 전송이 백그라운드에서 발생하는지 확인하려면 WorkManager를 사용하여 작업을 예약하세요.
권장사항
- 호환 기기 페어링을 사용하여 블루투스 기기를 페어링하여 블루투스 페어링 중에 수동 절전 모드 해제 잠금을 획득하지 않도록 합니다.
- 백그라운드에서 통신 안내를 참고하여 백그라운드 블루투스 통신 방법을 알아보세요.
- 수동 절전 모드가 필요한 경우 블루투스 작업 시간 동안만 절전 모드를 유지하세요.
기기 센서
걸음 수, 가속도계 또는 자이로스코프 데이터와 같은 기기 센서 데이터를 추적하는 방법에는 여러 가지가 있습니다.
Wear OS에서는 Wear 건강 관리 서비스를 사용하여 고도, 심박수, 이동 거리와 같은 기기 데이터를 가져옵니다.
다른 애플리케이션에서 데이터를 수집하는 경우 WorkManager와 결합된 헬스 커넥트를 사용하여 데이터를 가져올 수 있습니다.
걸음 수 또는 이동 거리의 변화를 추적하는 등의 시나리오에서는 모바일의 Recording API를 WorkManager와 결합하여 데이터를 검색할 수 있습니다.
특정 상황에서는 SensorManager
를 사용하여 맞춤 기기 센서 추적이 필요할 수 있습니다. SensorManager
는 센서가 isWakeUpSensor
API를 사용하여 식별할 수 있는 절전 모드 해제 센서가 아닌 한 앱을 대신하여 절전 모드 해제 잠금을 획득하지 않습니다.
권장사항
센서를 사용하여 높은 샘플링 속도로 기록하면 배터리가 크게 소모될 수 있습니다. 배터리 소모와 절전 모드 사용을 줄이기 위한 권장사항은 다음과 같습니다.
- 걸음 수나 이동 거리를 추적하는 경우 Recording API를 사용하여 배터리 효율적인 방식으로 데이터를 기록합니다.
- Wear OS에서 수동 센서 추적의 경우 Wear 건강 관리 서비스를 사용하여 배터리 사용량을 최적화하세요.
- 센서 주파수를 200Hz 미만으로 줄입니다.
SensorManager
로 센서를 등록할 때 센서 일괄 처리 로직을 사용하고 애플리케이션이 수신하는 인터럽트 수를 줄이려면 30초가 넘는maxReportLatencyUs
를 정의하세요.- 센서 추적의 전체 기간 동안 긴 절전 모드 잠금을 유지하지 말고 AlarmManager를 사용하여 30초마다 센서 데이터를 폴링하는 알람을 예약하세요.
Firebase 클라우드 메시지 (FCM)
앱에 Firebase 클라우드 메시지 (FCM) 브로드캐스트를 전달하는 동안 절전 모드 해제 대기열이 획득됩니다. FCM 브로드캐스트 onMessageReceived()
메서드 실행이 완료되면 절전 모드 해제 대기열이 해제됩니다.
Wake lock 이름
GOOGLE_C2DM
이름으로 절전 모드 해제 잠금이 획득됩니다.
권장사항
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*
권장사항
- 위치 사용 최적화 예를 들어 제한 시간을 설정하거나, 위치 요청을 일괄 처리하거나, 수동적 위치 업데이트를 사용합니다.
- 위치 API를 사용하는 경우 절전 모드 해제 대기열을 직접 획득할 필요가 없습니다. API가 필요한 절전 모드 해제 대기열을 획득하도록 하면 됩니다.
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 이상을 실행하고 WorkManager 2.10.0+
를 사용하는 기기에서 절전 모드 해제 잠금은 다음과 같이 명명됩니다.
*job*e/#BackupFileWorker#/com.example.app/androidx.work.impl.background.systemjob.SystemJobService
권장사항
- Android 16 이상에서 절전 모드 해제 태그가 더 자세해지도록 WorkManager 버전을 업그레이드하세요.
- WorkManager 작업자 사용을 감사합니다. 특히 작업 예약 API의 배터리 사용 최적화에 관한 안내를 따르세요.
_UNKNOWN
디버깅 도구에서 절전 모드 해제 잠금 이름에 개인 식별 정보 (PII)가 포함되어 있다고 생각하면 실제 절전 모드 해제 잠금 이름이 표시되지 않습니다. 대신 절전 모드 해제 잠금을 _UNKNOWN
로 라벨링합니다. 예를 들어 절전 모드 해제 잠금 이름에 이메일 주소가 포함된 경우 도구에서 이 작업을 실행할 수 있습니다.
권장사항
절전 모드 해제 잠금 이름 지정 권장사항을 따르고 절전 모드 해제 잠금 이름에 개인 식별 정보를 사용하지 마세요. 앱에 기여한 것으로 표시된 _UNKNOWN
라는 절전 모드 해제 잠금을 찾은 경우 해당 절전 모드 해제 잠금을 식별하고 다른 이름을 지정해 보세요.