0. 개요
WorkManager는 즉시 실행하지 않아도되는 백그라운드 작업을 구현할 때 사용할 수 있다. (즉시 실행이 필요 -> Foreground service)
또한, 앱이 종료 되거나 단말이 다시 시작 되더라도 안정적 실행이 필요한 작업을위한 것이다.
아래와 같이 종속성을 추가하고, Worker와 WorkRequest 를 정의하고 사용하면 된다. 각각에 대해서 알아봅시다 :)
종속성
dependencies {
implementation "androidx.work:work-runtime-ktx:2.3.2" // 최신버전을 확인해주세요.
}
1. Worker
작업의 단위를 정의
- 샘플 코드
class MyWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
override fun doWork(): Result {
// 여기에 Worker 로직을 정의
return Result.success() // Work의 상태.
}
}
- Work의 3가지 상태
- Result.success() : 성공적 완료 => SUCCESSED
- Result.failure() : 실패 => FAILED
- Result.retry() : 나중에 다시 시도 => CANCELED
2. WokrRequest
작업이 언제/어떻게 실행되어야할지를 정의
- 일회성 실행: OneTimeWrokRequest
- 주기적으로 실행: PeriodicWorkRequest
- 샘플 코드
// step1. WorkRequest 정의
val myWorkerRequest = OneTimeWorkRequestBuilder<MyWorker>().build()
// step2. WorkRequest 전달
WorkManager.getInstance(context).enqueue(myWorkerRequest)
- WorkRequest의 세부사항
Constraints를 추가하여, 작업을 실행할 수 있는 조건을 추가할 수 있다.
예를 들어서, 기기가 유휴상태이고, 전원에 연결된 상태일 때만 작업을 실행하고 싶다면 아래와 같이 작성할 수 있다.
// step1. Constraints 생성
val constraints = Constraints.Builder()
.setRequiresDeviceIdle(true
.setRequiresCharging(true
.build()
// step2. WorkRequest 정의 시, 세팅
val myWork = OneTimeWorkRequestBuilder<myWorker>()
.setConstraints(constraints)
.build()
참고
https://developer.android.com/topic/libraries/architecture/workmanager