-
이 명령을 통해 dumpsys 중에 jobscheduler 에 대한 정보들만 발췌해 볼 수 있다.
$ adb shell dumpsys jobscheduler
-
그 중에서 내가 등록한 Job 에 대해 한번 보자.
JOB #u0a241/2: b002751 com.cklee.test/.scheduler.MyJobService
u0a241 tag=*job*/com.cklee.test/.scheduler.MyJobService
Source: uid=u0a241 user=0 pkg=com.cklee.test
JobInfo:
Service: com.cklee.test/.scheduler.MyJobService
Requires: charging=false batteryNotLow=false deviceIdle=false
Minimum latency: +3h0m0s0ms
Max execution delay: +3h0m0s100ms
Backoff: policy=1 initial=+30s0ms
Has early constraint
Has late constraint
Required constraints: TIMING_DELAY DEADLINE [0xc0000000]
Satisfied constraints: TIMING_DELAY DEADLINE DEVICE_NOT_DOZING [0xc2000000]
Unsatisfied constraints:
Tracking: TIME
Standby bucket: RARE
Base heartbeat: 0
Enqueue time: -14h50m35s267ms
Run time: earliest=-11h50m35s267ms, latest=-11h50m35s167ms
Last run heartbeat: 18
Ready: false (job=false user=true !pending=true !active=true !backingup=true comp=true)
-
위 코드를 보면 dumpsys 가 찍는 내용이 어떤 것을 의미하는지 볼 수 있다.
-
다른 정보들도 중요하지만 "JobInfo" 부분이 핵심이다.
한번 분석해보자.
JobInfo:
Service: com.cklee.test/.scheduler.MyJobService
Requires: charging=false batteryNotLow=false deviceIdle=false
Minimum latency: +3h0m0s0ms
Max execution delay: +3h0m0s100ms
Backoff: policy=1 initial=+30s0ms
Has early constraint
Has late constraint
Service: com.cklee.test/.scheduler.MyJobService
Job 이 실행되면 com.cklee.test/.scheduler.MyJobService 를 launch 시킨다.
Requires: charging=false batteryNotLow=false deviceIdle=false
이 Job 이 실행되기 위한 요구사항은 없다. (충전중, 배터리가 낮지 않을 때, 단말이 유휴상태일 때 조건들이 있다.)
Minimum latency: +3h0m0s0ms
Max execution delay: +3h0m0s100ms
Job이 3시간 후에 돌도록 설정 되어 있고, 늦어도 3시간 100ms 시간 안에는 실행되기를 원한다는 의미이다.
Backoff: policy=1 initial=+30s0ms
policy 의 번호의 의미는 다음과 같다. 1(Linear), 2(Exponential)
피치 못하게 실행 못 시켰을 때는 linear(1) 하게 재시도 주기를 조정하는데 30초 후에 다시 시도한다는 의미.
Has early constraint
Has late constraint
별다른 early late 제약사항 없음
-
constraint 부분은 Job 이 실행할 조건을 만족시켰느냐에 초점을 맞추고 있다.
Required constraints: TIMING_DELAY DEADLINE [0xc0000000]
Satisfied constraints: TIMING_DELAY DEADLINE DEVICE_NOT_DOZING [0xc2000000]
Unsatisfied constraints:
required constraints 는 job 에 요구사항으로 주어진 contraints
satisfied constraints 는 job 이 dump 를 찍은 시점에 만족시키는 요구사항
unsatisfied constraints 는 job 이 dump 를 찍은 시점에 만족시키지 못하고 있는 요구사항 (여기서는 없음)
TIMING_DELAY : 딜레이를 주고 job 을 시작하라고 하는데 그 조건을 만족시켯는가
DEADLINE : 언제까지는 job 을 꼭 시작해야 한다고 하는데 그 조건을 만족시켰는가
DEVICE_NOT_DOZING : 단말이 도즈모드가 아닌가
-
Tracking: TIME
시간 기반으로 tracking 한다.
BATTERY, CONNECTIVITY, CONTENT, IDLE, STORAGE, TIME 등의 tracking 기반이 있다.
-
Standby bucket: RARE
Standby bucket 정보로 RARE 일 경우 Job 이 24h 까지 defer 될 수 있다.
-
Base heartbeat: 0
job 이 schedule 되거나 마지막으로 작동한 횟수.
-
Enqueue time: -14h50m35s267ms
dump 를 뜨는 시점 기준 -14h 50m 35s 전에 Job 이 등록되었다.
-
Run time: earliest=-11h50m35s267ms, latest=-11h50m35s167ms
dump 를 뜨는 시점 기준 최소 -11h 50m 35s 시각에 job 이 실행되었어야 하고, 늦어도 -11h 50m 35s 시각에 실행되었어야 한다.
-
Last run heartbeat: 18
소스상 정확히 알 수 없지만, 동일 형태의 Job 이 마지막으로 작동한 횟수를 나타내는 듯 하다.
-
Ready: false (job=false user=true !pending=true !active=true !backingup=true comp=true)
Job 이 돌 준비가 되었는가에 대한 내용으로 괄호 안에 있는 조건이 모두 true 여야 돌 준비가 된 것이다.
job : job.isReady -> 다른 constraint 가 satisfied 됨은 물론, DeviceNotDozing, NotRestrictedInBackground 가 암시적으로 만족되어있어야 한다.
user : mStartedUsers 에 job 의 userId 가 포함되었는가
pending : mPendingJob 에 job 이 들어있는가
active : job 이 isCurrentlyActiveLocked 인가
backingup : mBackingUpUids 에 job 의 sourceId 가 포함되어 있는가
comp : component 가 있는가
-
위의 예제는 JobScheduler 를 통해 등록한 Job 의 dump 를 어떤 식으로 분석하는가에 대한 예시이다.
상황에 따라 dump 의 내용은 다르기 때문에 위의 자료를 참고하여 본인의 상황에 맞게 구글링 + 소스 분석을 통해 분석하면 되겠다.
JobScheduler 를 다루는 모든 개발자들이여 화이팅!!
-
끝!!
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[android] App 이 kill 되면 Alarm 이나 Job 은 어떻게 될끼? (0) | 2020.07.26 |
---|---|
[android] Recent app 에서 swipe 로 app 을 죽이면 process kill 이 될까? (0) | 2020.07.25 |
[android 10] 개발자를 위한 Android Q 가이드 (Highlights) (0) | 2020.03.17 |
[android 10] android Q 기능과 API 들 (0) | 2020.03.16 |
[android 10] Q target 하는 앱의 동작 변화 (0) | 2020.03.15 |
댓글