작업 체이닝
WorkContinuation
객체를 사용하면 일련의 일회성 작업을 체이닝하여 예약할 수 있다.
WorkManager#beginWith(OneTimeWorkRequest)
는 처음 실행하고자 하는 작업 정보를 포함하는 WorkContinuation
객체를 반환한다. 그 다음 WorkContinuation#then(OneTimeWorkRequest)
를 사용하여 이어서 실행하고자 하는 작업을 체이닝하면 된다. 한 번에 여러 작업을 동시에 실행하려면 위의 각 메서드의 파라미터로 List<OneTimeWorkRequest>
를 전달한다.
마지막으로 WorkContinuation#enqueue()
로 작업 체인을 WorkManager
에 예약하면 된다.
다음은 work1
, work2
, work3
를 동시에 실행한 다음 cache
, upload
를 순서대로 실행하도록 작업 체인을 예약하는 예시다.
WorkManager.getInstance(context)
.beginWith(listOf(work1, work2, work3))
.then(cache)
.then(upload)
.enqueue()
InputMerger
작업 체인에서 작업 요청의 출력 데이터는 다음 작업 요청의 입력 데이터로 전달된다. 위 예시처럼 여러 작업 요청을 동시에 처리해야 하는 경우 InputMerger
를 사용한다. OverwritingInputMerger
또는 ArrayCreatingInputMerger
를 사용할 수 있다.
OverwritingInputMerger
기본값으로 사용되는InputMerger
. 키 충돌이 발생하면 나중에 입력된 데이터가 이전 데이터를 덮어 쓴다. 리스트로 전달된 작업 요청들은 동시에 실행되므로 어떤 값으로 덮어 쓰일지 순서를 보장할 수 없다.ArrayCreatingInputMerger
각 키에 대응하는 배열을 생성하는InputMerger
. 모든 키가 고유하여 충돌이 발생하지 않는다면 각 키에 대응하는 배열은 단일 성분을 포함할 것이다. 키 충돌이 발생하더라도 배열 안에서 모든 데이터가 유지된다.
작업 요청 체인의 상태 변화
작업 요청 체인은 상위 요청에서 시작하여 하위 요청으로 순차적으로 실행된다. 체인 내의 각 요청이 성공(ListenableWorker.Result#success()
를 반환)해야 BLOCKED
상태인 하위 요청이 ENQUEUED
상태로 변경되어 이어서 실행된다.
작업 실행 시 오류가 발생하면 설정된 재시도 및 백오프 정책에 의해 재시도하며, 동시에 실행되는 다른 요청에는 영향을 미치지 않는다.
재시도 정책이 없거나 실패(ListenableWorker.Result#failure()
를 반환)하는 경우 모든 하위 요청은 FAILED
상태로 완료된다.
취소되는 경우도 마찬가지로 모든 하위 요청이 CANCELLED
상태로 완료된다.
'Android' 카테고리의 다른 글
ViewModel 맛보기 (0) | 2023.02.27 |
---|---|
Retrofit2로 JSON 데이터 요청하기 (0) | 2023.02.21 |
WorkManager (3) : 작업 관리하기 (0) | 2022.12.05 |
WorkManager (2) : 작업 상태 (0) | 2022.12.02 |
WorkManager (1) : 작업 설정/예약하기 (0) | 2022.12.02 |