[Android] 앱 수면상태/DozeMode/잠자기 모드에 대한 모든 것

안드로이드는 Android 6.0(API 23) 부터 배터리 수명연장을 위해 절전기능인

Doze Mode, Standby Mode 2가지를 도입하였습니다. 우리말로 변역하자면 수면 상태와 대기 상태를 의미합니다.

 

아마 앱 개발 중, AlarmManager를 통해 앱 알람 기능을 구현하려고 하다보면 알람이 제때 울리지 않아

문제를 겪게 되어 곤란한 상황이 발생하는데요! 오늘은 그 문제를 해결하기 위한 첫번째 순서로,

Doze Mode에 대해서 알아보겠습니다.

 

* 해당 페이지에선 Doze Mode에 대해서만 다루기 때문에 수면상태, 수면모드, 더즈모드, 잠자기 모드... 용어를 섞어 사용하고 있습니다. 용어는 다르지만 모두 같은 상태를 의미합니다!

(개인적으로 처음 접했을 땐 용어 자체를 몰라 한참 찾았던 적이 있어 그런 분들 위해 많은 검색을 위해...ㅎㅎ)

 

Doze Mode : 기기를 오랫동안 사용하지 않을때 실행

출처 : Android Developer

실행 조건

- 충전 상태가 아닐 때

- 화면이 꺼진채로 일정 기간 정지 상태가 유지될 때

 

제약 사항

- 네트워크 및 CPU를 많이 사용하는 서비스에 대한 앱의 액세스 제한

- 네트워크 액세스 제한

- 작업, 동기화 및 표준 알람 지연

 

특이 사항

- Doze Mode를 통해 지연된 활동들을 수행 하기 위해, 휴대폰은 주기적으로 잠자기 모드에서 깨어나 유지보수 기간을 가진 후, 다시 잠자기 모드로 돌아간다. Doze Mode가 유지 될수록 유지보수 주기가 점점 길어진다.

(위 첨부된 사진과 같이 수면상태가 길어질 수록 유지보수 횟수 주기도 점점 길어지는걸 볼 수 있다.)

 

- 기기의 움직임 감지, 배터리 충전 시작, 화면을 켜는 것과 같이 절전 모드 해제 시 Doze Mode 종료 후, 모든 앱은 정상적인 활동으로 돌아간다.(그동안 미루어진 알람, 기능들 작동)


위 제약사항중 '표준 알람 지연' 이라는걸 확인하셨나요?

API23 이상 버전 부터는 이 절전모드로 인해 그 이전까지 사용했던 AlarmManager기능이 원하는대로 작동하지 않게 됩니다. set(), setExact() 등... 

그래서 안드로이드는 setAndAllowWhileIdle()setExacAndAllowWhileIdle()를 도입하였습니다. 해당 기능을 사용하면 잠자기 모드에서도 알람이 울린다고 하는데요!

AlarmManager에 관한 자세한 내용은 다음 포스팅에서 테스트 결과를 통해 알아보도록 하겠습니다.

(미리 스포를 하자면 원하는대로 작동하지 않습니다! 왜 그런지? 그럼 어떤식으로 해야하는지? 금방 준비해서 돌아오겠습니다.)

 

 

 

* 위 글은 2021.03.28 기준으로 작성되었습니다. 이후 언제든지 내용이 바뀔 수 있으니 공식문서도 확인해보시길 바랍니다.

* 잘못된 사항, 추가 및 지적사항 댓글 남겨주시면 바로 수정하도록 하겠습니다. 감사합니다!

출처 : developer.android.com/training/monitoring-device-state/doze-standby

 

잠자기 및 앱 대기 모드에 맞게 최적화  |  Android 개발자  |  Android Developers

앱에서 Android 6.0의 절전 기능을 테스트하고 최적화합니다.

developer.android.com