Job Scheduler
백그라운드 제한은?
안드로이드 O에서는 앱이 백그라운드에 진입하게 되면 몇분 뒤 동작 중인 백그라운드 서비스는 자동으로 중지되며 **onDestroy()**가 호출됩니다. 더하여 백그라운드 상태에서 서비스를 구동하기 위한 startService()의 호출은 IllegalStateException이 발생하며 허용되지 않는다.
암시적 브로드캐스트 제한
- 암시적 브로드캐스트 인텐트(Implicit Broadcast Intent)란 특정 앱을 대상으로 하지 않는 브로드캐스트 인텐트
- 안드로이드O 에서는 암시적 브로드캐스트 수신자를 등록 할 수 없도록 제한
- 안드로이드N 상에서는 특정 인텐트 동작을 제한 하였다.
- 필수 인텐트는 제한하지 않는다.
targetSDK ≥ 26
- 백그라운드 실행 제한은 target SDK가 Android O(API Level 26) 이상인 경우에 적용
가능한 작업들
- AndroidManifest.xml에 명시적(Explicit) 브로드캐스트는 등록이 가능하다.
- Context.registerReceiver()를 통해 리시버를 동적으로 등록할 수 있고 이렇게 등록된 리시버는 암시적 브로드캐스트 인텐트의 수신 제한에 해당되지 않는다.
JobScheduler?
- 안드로이드 롤리팝에서는 Project Volta와 함께 백그라운드 동작을 최적화하기 위한 일환으로 JobScheduler를 소개
- 작업에 필요한 조건 및 인자들(JobInfo)과 해당 조건의 동작(JobService)을 등록하고, 안드로이드 프레임워크에 의해 적정한 실행 시점이 제어되는 백그라운드 실행 기능
Job 구현 구성
JobInfo
를 통해 Job이 실행될 조건을 설정하고, JobScheduler
를 통해 이를 시스템에 등록합니다.JobService
를 상속받아 Job 실행 시 필요한 동작을 구현합니다.- Job 실행을 위한 권한(
android.permission.BIND_JOB_SERVICE
)를 등록합니다.
실행 조건의 설정과 등록
JobInfo는 네트워크의 연결 상태나 충전 여부, 디바이스의 유휴 시점 등 JobService가 실행되어야 하는 조건을 관리
- 연결된 네트워크 타입
- 충전 여부
- 디바이스 유휴(Idle) 여부
- 콘텐트 프로바이더의 갱신
- 클립 데이터
- 실행 주기
- 최소 지연 시간
- 데드라인 설정
- 재시도 정책
- 리부팅 시의 현재 조건 유지 여부