WorkManager
- 비동기로 백그라운드 작업을 처리
- WorkManager를 사용하면 앱에서 실행되는 작업을 백그라운드에서 안정적으로 실행할 수 있음
- 안드로이드 API 수준 14이상에서 사용할 수 있으며 이전 버전의 안드로이드에서도 호환성을 제공
특징
- Work constraints (작업 제약 조건)
- 작업을 실행하는 데 최적인 조건을 선언적으로 정의 -> 최적의 조건이 충족될 때까지 작업이 지연
- 작업 제약 조건을 사용하여 앱이나 기기가 다시 시작되는 경우에도 실행이 보장
- 어떠한 제한 조건이 충족되면 즉시 실행
- Robust scheduling (강력한 예약 관리)
- 일회성 혹은 주기적인 비동기 작업을 예약할 수 있음
- 작업에 태그 및 이름을 지정하여 고유 작업 및 대체 가능한 작업을 예약하고 작업 그룹을 함께 모니터링하거나 취소할 수 있음
(작업의 모니터링 및 관리가 가능 -> 작업의 현재 상태 조회가 가능)
- 예약된 작업은 SQLite 데이터베이스에 저장되며 WorkManager에서 기기를 재부팅해도 작업이 유지되고 다시 예약되도록 보장
- 절전 기능을 사용하고 권장사항(예: Doze(잠자기) 모드)을 준수하므로 배터리 소모를 걱정하지 않아도 됨
- Expedited work (신속 처리 작업)
- 백그라운드에서 즉시 실행할 작업을 예약할 수 있음
- 사용자에게 중요하고 몇 분 내에 완료되는 작업에 사용
- Flexible retry policy (유연한 재시도 정책)
- 경우에 따라 작업이 실패하기도 하는데 이 때 WorkManager는 구성 가능한 지수 백오프 정책을 비롯해 유연한 재시도 정책을 제공
- Work chaining (작업 체이닝)
- 작업의 순차적 처리가 가능
- 복잡한 관련 작업의 경우 직관적인 인터페이스를 사용하여 개별 작업을 함께 체이닝하면 순차적으로 실행할 작업과 동시에 실행할 작업을 제어할 수 있음
- Built-In threading interoperability (내장 스레딩 상호 운용성)
- Coroutine 및 RxJava와 원활하게 통합되며 자체 비동기 API를 연결할 수 있는 유연성을 제공
WorkManager 구성
WorkManager
- 실제로 WorkRequest를 스케줄링하고 실행하며 관리하는 클래스
- 싱글톤으로 구현되어 있어
getInstance()
로 WorkManager의 인스턴스를 받아 사용
- 인스턴스를 받아와 WorkRequest를 큐에 추가하여 실행
Worker
- 추상 클래스
- 클래스를 상속받고 백그라운드에서 실행하고자 하는 코드를
doWork()
메소드에 정의
- 작업 상태를 나타내는 Result에 정의된
success()
, failure()
, retry()
등의 메소드를 통해 결과를 반환 -> 반환된 값에 따라서 이후 동작을 결정
- Result.Sucesss / Result.Failure / Result.Retry
WorkRequest
- Worker에 정의된 task를 작동시키기 위한 request를 나타냄
- WorkRequest를 생성할 때 반복 여부, 제약 사항 등의 정보를 담음
OneTimeWorkRequest
: 한 번만 실행할 작업 요청을 나타내는 클래스
PeriodicWorkRequest
: 일정 주기로, 여러번 실행할 작업 요청을 나타내는 클래스
WorkState
- WorkRequst의 id와 해당 WorkRequest의 현재 상태를 담는 클래스
- WorkState의 상태정보를 이용해서 자신이 요청한 작업의 현재 상태를 파악
ENQUEUED
, RUNNING
, SUCCEEDED
, FAILED
, BLOCKED
, CANCLLED
의 6개 상태를 가짐
사용법
여기 설명이 너무 잘 되어있다..ㅎㅎ
사실 WorkManager는 이전까지는 딱히 쓸 일이 없어서 접해보지 못 했던 거라 너무 생소하다ㅜㅜ 계속 더 공부해 봐야겠다😂
WorkManager 사용법
참조