Android 12 개발자 프리뷰에 오신 것을 환영합니다. 초기에 자주 의견을 제공하여 Android 12를 최고의 버전으로 만들도록 도와주세요.

포그라운드 서비스 시작 제한

의견 보내기 아이콘 이러한 제한사항에 관한 의견을 기다리고 있습니다. 간단한 설문조사에 참여하여 의견을 들려주세요. 특히 이번 변경사항으로 영향을 받는 앱의 사용 사례를 알려주세요.

Android 12를 타겟팅하는 앱은 몇 가지 특수한 사례를 제외하고 백그라운드에서 실행되는 동안 더 이상 포그라운드 서비스를 시작할 수 없습니다. 앱이 백그라운드에서 실행되는 동안 포그라운드 서비스를 시작하려고 하지만 포그라운드 서비스가 예외 사례 중 하나를 충족하지 못하면 시스템에서 IllegalStateException이 발생합니다.

앱이 이 변경사항으로 영향을 받는 경우 WorkManager를 사용하도록 이전하는 것이 좋습니다. Android 12 베타가 출시되면 WorkManager는 우선순위가 높은 백그라운드 작업을 시작하는 데 권장되는 솔루션이 됩니다.

Work Manager 2.7.0-alpha01에서는 Android 12의 새로운 작업 유형인 신속 처리 작업이 지원됩니다. Android 11 이하에서는 이 버전의 WorkManager가 포그라운드 서비스를 사용하여 이전 버전과의 호환성을 제공합니다.

Work Manager 2.7.0-alpha01에서 신속 처리 작업을 사용하는 방법에 관한 전체 예는 GitHub의 WorkManagerSample을 참고하세요.

신속 처리 작업

Android 12에서 새로 도입된 신속 처리 작업을 사용하면 앱이 중요한 작업을 실행하는 동시에 시스템에서는 리소스 액세스를 더 효과적으로 제어할 수 있습니다. 이러한 작업의 특성은 포그라운드 서비스와 JobScheduler 작업 사이에 있습니다.

  • 절전 모드와 잠자기를 비롯한 시스템의 전원 관리 제한사항에 영향을 받지 않습니다.
  • 시스템의 현재 워크로드에서 실행이 가능하다면 시스템은 신속 처리 작업을 즉시 실행합니다.

신속 처리 작업은 지연될 수 있음

시스템은 작업이 호출된 후 최대한 빨리 지정된 신속 처리 작업을 실행하려고 합니다. 그러나 다른 작업 유형과 마찬가지로 시스템은 이미 너무 많은 작업이 실행되고 있거나 시스템 리소스가 부족하면 새 신속 처리 작업의 시작을 지연시킬 수 있습니다.

특히 시스템은 다음 조건 중 하나 이상이 발생하면 신속 처리 작업의 실행을 지연시킵니다.

  • 시스템 로드가 너무 높습니다.
  • 신속 처리 작업 할당량 한도가 초과되었습니다. 신속 처리 작업은 앱 대기 버킷에 기반하는 할당량 시스템을 사용하고 롤링 시간 내에서 최대 실행 시간을 제한합니다. 신속 처리 작업에 사용되는 할당량은 다른 유형의 백그라운드 작업에 사용되는 할당량보다 더 제한됩니다.

WorkManager 업데이트

WorkManager 2.7.0-alpha01부터 앱은 setExpedited()를 호출하여 Worker가 신속 처리되어야 한다고 선언할 수 있습니다. 이 새로운 API는 Android 12에서 실행될 때 신속 처리 작업을 사용하고 API는 이전 버전의 Android에서 포그라운드 서비스를 사용합니다.

개발자가 앱에서 의도적으로 신속 처리 작업을 요청하도록 권장하고 작업 실행 시간을 연장하는 기능을 더 잘 지원하기 위해 CoroutineWorker.setForeground()ListenableWorker.setForegroundAsync() 메서드가 지원 중단됩니다. 특히 Android 12를 실행하는 기기에서는 ListenableWorker.setForegroundAsync()를 호출하려고 하면 IllegalStateException이 발생합니다. 개발자는 대신 setExpedited()를 사용하는 것이 좋습니다.

백그라운드에서 포그라운드 서비스 시작이 허용되는 경우

다음 상황에서는 앱이 백그라운드에서 실행되는 동안에도 포그라운드 서비스를 시작할 수 있습니다.

대화상자에서는 사용자가 백그라운드에서 앱을 항상 실행되도록 할지 묻습니다. 대화상자에는 거부와 허용 버튼 두 개가 있습니다.
그림 1. 배터리 최적화를 삭제하면 기기 배터리 수명이 줄어들 수 있다고 사용자에게 경고하는 시스템 대화상자