백그라운드 작업이 필요한데, 그 전에 구글에서 제한하고 있는 백그라운드 작업에 대해서 알아보려고 한다.

1. 버전별 백그라운드 정책 변천사

안드로이드는 큰 업데이트마다 배터리를 관리하기 위한 여러 기능들을 포함해왔다. 아래의 내용을 확인해보자.

  • 롤리팝 5.0 : Job Scheduler의 등장. 작업을 미루거나 스케쥴링 할 수 있도록 함.
  • 마시멜로우 6.0 : 도즈 모드 및 앱 대기모드 등장.
    • 디바이스 또는 앱이 장시간 사용중이 아닐 때 즉, 화면이 꺼지고 충전중이 아닐 때, 네트워크의 접근을 제한하고 백그라운드 작업을 유예하기 시작.
  • 누가 7.0 : 개선된 도즈모드
    • 화면이 꺼지고 움직이지 않을 때 도즈모드의 하위 제약 조건이 적용되기 시작.
  • 오레오 8.0 : 백그라운드 제약
    • 백그라운드 서비스와 위치 갱신을 제약하기 시작.
  • 파이 9.0 : 앱 대기 버킷, 배터리 세이버 개선.

Oreo 버전 이상을 대상으로 업데이트 할 때 아래의 체크리스트를 확인하여 백그라운드 작업을 설정할 수 있다.

현재 사용하고 있는 방법 오레오 이상에서 사용해야 하는 방법
JobScheduler JobScheduler
Firebase JobDispatcher Firebase JobDispatcher
Background Service JobScheduler
Foreground Service Foreground Service와 해당 서비스를 종료해야 할 액션(stopService)

WorkManager 라이브러리가 현재는 Alpha 단계이기 때문에 위의 방법들로 개발해야 하지만 정식 버전이 출시된다면 거의 모든 경우를 WorkManager로 해결할 수 있을 것 같다. 기대해보자~

2. 올바른 앱을 만드는 전략

  • 백그라운드에서 수행하는 작업은 지연 가능할만한 작업들로 만든다.
  • Foreground Service를 사용할 때는 노티피케이션을 반드시 제공하여 사용자가 서비스를 중지할 수 있도록 한다.
  • 알람, 네트워크 및 FCM 메시지와 같은 OS 기반의 작업에서는 이와 관련된 전원 관리 제한사항에 대한 문서 내용을 확인해보자.

참고