잠자기 모드와 앱 대기 모드란?
잠자기 모드Doze
- 핸드폰을 적은 전력으로 오래 사용할 수 있도록 일정 기간 사용하지 않으면 실행되는 모드.
- Doze 기간에는 일부 기능이 제한되고, 짧은 Maintenance Window 기간동안 제한이 해제된다. Doze 모드가 길어질수록 Doze 기간이 길어진다.
- Light Doze, Deep Doze로 구분된다.
- 진입 조건
- Light Doze: Screen Off, On Battery
- Deep Doze: Screen Off, On Battery, Stationary
- 제약 사항
- Light Doze: Job 지연, 네트워크 불가능.
- Deep Doze: Alarm 제한1, WakeLock 불가능.
- 테스트 방법
// 설정 adb shell dumpsys deviceidle force-idle // 해제 adb shell dumpsys deviceidle unforce adb shell dumpsys battery reset
앱 대기 모드App Standby
- 사용자가 앱을 활발히 사용하지 않으면 실행되는 모드.
- 앱 사용 빈도에 따라 앱을 여러 앱 대기 버킷2에 배치한다.
UsageStatsManager.getAppStandbyBucket()
을 통해 확인할 수 있다.- 제약 사항
- 드물게 사용될수록 제약이 많아진다.
- Job은 몇 시간에 10분, Alarm의 경우 1시간에 몇 번 꼴로 실행.
- 드물게 사용 버킷부터는 네트워크 및 FCM3 을 사용할 수 없다.
- 테스트 방법
// 설정 adb shell dumpsys battery unplug adb shell am set-inactive <packageName> true adb shell am set-standby-bucket active|working_set|frequent|rare // 해제 adb shell am set-inactive <packageName> false adb shell am get-inactive <packageName>
1set~AndAllowWhileIdle() 메서드가 부분적인 제약과 함께 동작한다.
2활성, 작업 세트, 자주 사용, 드물게 사용, 제한됨, 사용한 적 없음이 있다.
3높은 우선순위의 메시지는 전송 가능하다.