https://blog.naver.com/jihad74/221234102762


Job Scheduler

백그라운드 제한은?

안드로이드 O에서는 앱이 백그라운드에 진입하게 되면 몇분 뒤 동작 중인 백그라운드 서비스는 자동으로 중지되며 **onDestroy()**가 호출됩니다. 더하여 백그라운드 상태에서 서비스를 구동하기 위한 startService()의 호출은 IllegalStateException이 발생하며 허용되지 않는다.

암시적 브로드캐스트 제한

  • 암시적 브로드캐스트 인텐트(Implicit Broadcast Intent)란 특정 앱을 대상으로 하지 않는 브로드캐스트 인텐트
  • 안드로이드O 에서는 암시적 브로드캐스트 수신자를 등록 할 수 없도록 제한
    • 안드로이드N 상에서는 특정 인텐트 동작을 제한 하였다.
    • 필수 인텐트는 제한하지 않는다.


targetSDK ≥ 26

가능한 작업들

  • AndroidManifest.xml에 명시적(Explicit) 브로드캐스트는 등록이 가능하다.
  • Context.registerReceiver()를 통해 리시버를 동적으로 등록할 수 있고 이렇게 등록된 리시버는 암시적 브로드캐스트 인텐트의 수신 제한에 해당되지 않는다.

JobScheduler?

  • 안드로이드 롤리팝에서는 Project Volta와 함께 백그라운드 동작을 최적화하기 위한 일환으로 JobScheduler를 소개
  • 작업에 필요한 조건 및 인자들(JobInfo)과 해당 조건의 동작(JobService)을 등록하고, 안드로이드 프레임워크에 의해 적정한 실행 시점이 제어되는 백그라운드 실행 기능

Job 구현 구성

  1. JobInfo를 통해 Job이 실행될 조건을 설정하고, JobScheduler를 통해 이를 시스템에 등록합니다.
  2. JobService를 상속받아 Job 실행 시 필요한 동작을 구현합니다.
  3. Job 실행을 위한 권한(android.permission.BIND_JOB_SERVICE)를 등록합니다.

실행 조건의 설정과 등록

JobInfo는 네트워크의 연결 상태나 충전 여부, 디바이스의 유휴 시점 등 JobService가 실행되어야 하는 조건을 관리

  • 연결된 네트워크 타입
  • 충전 여부
  • 디바이스 유휴(Idle) 여부
  • 콘텐트 프로바이더의 갱신
  • 클립 데이터
  • 실행 주기
  • 최소 지연 시간
  • 데드라인 설정
  • 재시도 정책
  • 리부팅 시의 현재 조건 유지 여부