티스토리 뷰
https://developer.android.com/training/monitoring-device-state/doze-standby?hl=ko
유지관리 기간이 끝나면 시스템이 다시 잠자기 모드로 들어가면서 네트워크 액세스가 정지되고 작업, 동기화 및 알람이 지연됩니다. 시간이 지날수록 시스템은 유지관리 기간의 횟수를 줄입니다. 그 이유는 기기가 충전기에 연결되어 있지 않은 상태에서 비활성 기간이 길어지는 경우에 배터리 소모량을 낮출 수 있기 때문입니다.
사용자가 기기를 움직이거나 화면을 켜거나 충전기를 연결하여 기기를 활성화하면 시스템은 잠자기 모드를 종료하고 모든 앱은 정상적인 액티비티로 돌아갑니다.
잠자기 모드 제한 사항
앱이 Doze 상태에 있는 동안 다음과 같은 제한 사항이 적용됩니다.
- 네트워크 액세스가 정지됩니다.
- 시스템은 wake locks를 무시합니다.
- 표준
AlarmManager
알람(setExact()
및setWindow()
포함)은 다음 유지관리 기간으로 연기됩니다. - 잠자기 모드 중 알람이 실행되도록 설정해야 하는 경우에는
setAndAllowWhileIdle()
또는setExactAndAllowWhileIdle()
을 사용합니다. setAlarmClock()
으로 설정된 알람은 정상적으로 실행됩니다. 시스템은 알람이 실행되기 직전에 잠자기 모드를 종료합니다.
- 잠자기 모드 중 알람이 실행되도록 설정해야 하는 경우에는
- 시스템은 Wi-Fi 스캔을 수행하지 않습니다.
- 시스템은 동기화 어댑터 실행을 허용하지 않습니다.
- 시스템은
JobScheduler
실행을 허용하지 않습니다.
잠자기 모드에 맞게 앱 조정
잠자기 모드가 앱에 미치는 영향은 앱에서 제공되는 기능과 사용하는 서비스에 따라 달라집니다. 대부분의 앱은 수정하지 않아도 잠자기 모드에서 정상적으로 작동합니다. 하지만 일부 경우에는 앱이 네트워크, 알람, 작업 및 동기화를 관리하는 방법을 최적화해야 합니다. 앱은 유지관리 기간 동안 액티비티를 효율적으로 관리할 수 있어야 합니다.
잠자기 모드는 특히 AlarmManager
알람 및 타이머가 관리하는 액티비티에 영향을 줄 가능성이 높습니다. 시스템이 잠자기 모드에 있는 경우, Android 5.1(API 레벨 22) 이하의 알람은 실행되지 않기 때문입니다.
알람 예약을 지원하기 위해 Android 6.0(API 레벨 23)에서는 두 개의 새로운 AlarmManager
메서드, setAndAllowWhileIdle()
및 setExactAndAllowWhileIdle()
을 도입했습니다. 메서드를 사용하면 기기가 잠자기 모드에 있는 경우에도 알람이 실행되도록 설정할 수 있습니다.
참고: setAndAllowWhileIdle()
과 setExactAndAllowWhileIdle()
모두 앱에서 알람을 9분마다 최대 한 번만 실행할 수 있습니다.
잠자기 모드에서 네트워크 액세스가 제한되는 현상은 특히 앱이 Tickle 또는 알림과 같은 실시간 메시지를 사용하는 경우에도 앱에 영향을 미칠 수 있습니다. 메시지를 수신하기 위해 앱에 네트워크와의 영구적 연결이 필요한 경우에는 가능하면 GCM(Google Cloud Messaging)을 사용해야 합니다.
앱이 잠자기 모드에서 예상대로 작동하는지 확인하려면 adb 명령어를 사용하여 시스템에서 강제로 잠자기 모드를 시작하고 종료하면서 앱의 동작을 관찰합니다. 자세한 내용은 잠자기 및 앱 대기 모드로 테스트를 참조하세요.
'Android' 카테고리의 다른 글
Calendar 연산 (0) | 2019.03.11 |
---|---|
잠자기 및 앱 대기 모드로 테스트 (0) | 2019.03.10 |
안드로이드 alarmmanager 관련 (0) | 2019.03.08 |
안드로이드 service에서 activity 실행 (0) | 2019.03.08 |
안드로이드 변수 이용 (0) | 2019.03.08 |