본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] Doze 모드와 App standby 모드 + GCM High priority message

by 돼지왕 왕돼지 2017. 9. 17.
반응형

[android] Doze 모드와 App standby 모드 + GCM High priority message


https://developer.android.com/training/monitoring-device-state/doze-standby.html

Active, adb shell, alarm, alarmmanager, am set-idle, App, App Standby, app standby 모드, app sync, App 실행, battery optimization, device unplug, deviceidle -h, deviceidle step, doze, doze mode test, doze mode 제약사항, Doze 모드, dumpsys, GCM, get-idle, high-priority, Idle, Job, jobscheduler, lock screen, M, network disable, notification try, notification 생성, Operation, pending operation, process foreground, resume, Schedule, Screen, setandallowwhileidle, setting, stand by mode, suspend, Sync, sync adapter, System, unplug, User, wake lock 무시, wi-fi scan, [android] Doze 모드와 App standby 모드 + GCM High priority message, 깜빡 잠이 들다, 연기, 움직임 없음, 졸다, 주기적 짧은 시간


-

MOS ( 6.0 ) 부터 등장



Doze 모드


-

device 가 unplug 된 상태로 오랜 시간 움직여지지 않으면 screen 이 꺼지고, 이 상태에서 시간이 지나면 Doze(깜빡 잠이 들다, 졸다) 모드에 들어간다.



-

Doze mode 에서는 device 는 주기적으로 아주 짧은 시간동안 resume 되어 보통의 operation 들을 수행한다.

이 resume time 에는 app sync 나 pending operation 을 수행하곤 한다.



-

Doze mode 에서는 다음과 같은 제약사항을 갖는다.


network 가 disable 된다.

!! GCM high-prioirty message 를 받는 것은 예외다. !!


system 은 Wake lock 을 무시한다.


AlarmManager 를 통해 schedule 된 alarm 은 연기된다.

!! setAndAllowWhileIdle() method 를 수행시켜놓았다면 연기되지 않는다. !!


System 은 Wi-Fi scan 을 하지 않는다.


System 은 sync adapter 가 수행하는 sync 나 job 이 수행되지 않도록 한다.


JobScheduler 라는 녀석이 수행되지 않도록 한다.




-

Doze mode test 하기

$ adb shell dumpsys battery unplug

$ adb shell dumpsys deviceidle step

$ adb shell dumpsys deviceidle -h





App Standby


-   

user 가 app 을 active 하게 사용하지 않으면 system 이 app 이 idle 이라고 판단하게 만드는 기능이다. ( Doze 모드랑 비교하면 Doze 모드는 시스템 전체에 해당하는 기능이고, App Stanby 는 한 app 에 국한된 기능이다. )

user 가 오랜 시간 app 을 터치하지 않으면 system 은 이 앱이 idle 이라고 판단하게 된다.



-

device 가 unplug 되어 있다면, system 이 network 를 disable 시키고 sync 나 job 등을 suspend 시킨다.



-

다음은 App Standby 의 예외사항으로 인정된다.


User 가 app 을 직접 실행


App 의 process 가 현재 foreground 이다.


app 이 lock screen 이나 notification tray 에서 볼 수 있는 notification 을 생성.


user 가 Setting 에서 battery optimization 대상에서 제외한 경우



-

아래 adb 명령을 통해 테스트 가능하다.

$ adb shell dumpsys battery unplug

$ adb shell am set-idle <packageName> true

$ adb shell am get-idle <packageName>




GCM High Priority Message


M 에서는 GCM message 를 high-priority message 로 분류할 수 있게 되었다.

App 이 high-priorty GCM 을 받으면 system 은 doze, stand by mode 라도 app 이 잠깐동안 network access 권한을 가질 수 있게 한다.




반응형

댓글