본문 바로가기

Development

[Android] Doze 모드 테스트 하기

개발을 하다보면 여러 상황에서 테스트를 많이 하게 됩니다.

특히 안드로이드의 경우 제조사 별, OS 별 동작이 상이하거나 예외 상황이 정말 많은 것 같습니다.

 

최근 여러가지 상황 중 Doze 모드에 관련해서 알아보았습니다.

 

처음 Doze 모드 라는 것을 들었을 때는

Android 6.0(Mashmallow) 버전이 나왔던 2015년도 말 ? 2016년도 초 ? 정도 였던 것 같습니다.

아마도 mashmallow 버전의 동작 변경사항을 확인하면서 보았으나..

뭔지도 모르고 스윽 지나갔던 것 같습니다.

 

Doze 모드는 6.0(API 23 수준) 부터 추가된 내용으로

배터리가 연결되지 않은 상태에서 움직임이 없이 특정 시간이 지나면 해당 모드로 전환되어 배터리 소모를 줄여주는 모드 입니다.

 

그리고 7.0(API 24 수준) 부터는 배터리가 연결되지 않은 상태에서 움직임이 있어도 특정 시간이 지나면 전환되는 Doze 모드도 있습니다.

배터리 효율을 더 높이기 위해 추가 되었다고 하는데요.

이는 단말을 사용하지 않고 주머니에 넣고 이동 중일 때를 말합니다.

 

Doze 모드로 전환이 되면, 아래와 같은 제한사항이 생기게 됩니다.

 

- 네트워크 액세스가 정지됩니다.

- 시스템에서 wake lock을 무시합니다.

- 표준 AlarmManager 알람(setExact() 및 setWindow()포함)이 다음 유지보수 기간으로 연기됩니다.
	1) 잠자기 모드에서 실행되는 알람을 설정해야 한다면 setAndAllowWhileIdle() 
	또는 setExactAndAllowWhileIdle()을 사용합니다.
	
    	2) setAlarmClock()으로 설정된 알람은 계속 정상적으로 실행됩니다. 
    	시스템에서 이 알람이 실행되기 직전에 잠자기 모드를 종료합니다.

- 시스템에서 Wi-Fi 검색을 실행하지 않습니다.

- 시스템에서 동기화 어댑터 실행을 허용하지 않습니다.

- 시스템에서 JobScheduler 실행을 허용하지 않습니다.

 

 

이와 관련해서 Doze 모드와 상관없이 동작을 해야하는 경우들이 있을 것이며,

그런 경우에는 Doze 모드에서 테스트를 충분히 해야 문제가 안 생길 수 있겠죠.

 

저 역시 이번에 개발한 내용 중에 Doze 모드에서 테스트가 필요했습니다.

단말을 Doze 모드로 전환시키는 방법은 그리 어렵지 않았습니다.

 

※ Doze 모드 상태로 만들기

 

1. Terminal 에서 SDK 가 설치되어 있는 경로에서 platform-tools 로 이동합니다.

2. adb shell dumpsys battery unplug 입력 (배터리가 충전되지 않도록 상태 변경)

3. adb shell dumpsys deviceidle step 입력 : 단말의 화면을 끄고 입력하세요. 입력 시 상태가 변경됩니다. 

 - IDLE PENDING

 - SENSING

 - LOCATING

 - IDLE <<<-- Doze 모드 상태

 - IDLE MAINTENANCE

 

해제방법

adb shell dumpsys battery reset 입력

adb shell dumpsys deviceidle step 입력

 

자세한 내용은 개발자 사이트에서 확인할 수 있습니다.

https://developer.android.com/training/monitoring-device-state/doze-standby?hl=ko

 

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

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

developer.android.com

 

알람 서비스 관련해서 작업한 내용을

위 방법으로 Doze 모드로 전환해서 테스트를 무사히 마칠 수 있었습니다.