[android] Doze 모드와 App standby 모드 + GCM High priority message
https://developer.android.com/training/monitoring-device-state/doze-standby.html
-
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 권한을 가질 수 있게 한다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] onActivityResult 는 app 이 background 일 때 불리지 않는다 (0) | 2017.09.20 |
---|---|
[android] Android 6.0(MOS) SDK 에서 바뀐 것들!! (0) | 2017.09.18 |
[android] Percent Support Library (0) | 2017.09.16 |
[android] Tinting drawables (0) | 2017.09.15 |
[android] 배경 딤처리하기 (0) | 2017.09.06 |
댓글