WorkManager를 사용하기 위해 먼저 라이브러리를 Android 프로젝트로 가져옵니다.
앱의 build.gradle
파일에 다음 종속 항목을 추가합니다.
Groovy
dependencies { def work_version = "2.9.1" // (Java only) implementation "androidx.work:work-runtime:$work_version" // Kotlin + coroutines implementation "androidx.work:work-runtime-ktx:$work_version" // optional - RxJava2 support implementation "androidx.work:work-rxjava2:$work_version" // optional - GCMNetworkManager support implementation "androidx.work:work-gcm:$work_version" // optional - Test helpers androidTestImplementation "androidx.work:work-testing:$work_version" // optional - Multiprocess support implementation "androidx.work:work-multiprocess:$work_version" }
Kotlin
dependencies { val work_version = "2.9.1" // (Java only) implementation("androidx.work:work-runtime:$work_version") // Kotlin + coroutines implementation("androidx.work:work-runtime-ktx:$work_version") // optional - RxJava2 support implementation("androidx.work:work-rxjava2:$work_version") // optional - GCMNetworkManager support implementation("androidx.work:work-gcm:$work_version") // optional - Test helpers androidTestImplementation("androidx.work:work-testing:$work_version") // optional - Multiprocess support implementation("androidx.work:work-multiprocess:$work_version") }
종속 항목을 추가하고 Gradle 프로젝트를 동기화했으면 다음으로 실행할 작업을 정의합니다.
작업 정의
작업은 Worker
클래스를 사용하여 정의합니다. doWork()
메서드는 WorkManager에서 제공하는 백그라운드 스레드에서 비동기적으로 실행됩니다.
WorkManager에서 실행할 작업을 만들려면 Worker
클래스를 확장하고 doWork()
메서드를 재정의합니다. 예를 들어 이미지를 업로드하는 Worker
를 만들려면 다음과 같이 할 수 있습니다.
Kotlin
class UploadWorker(appContext: Context, workerParams: WorkerParameters): Worker(appContext, workerParams) { override fun doWork(): Result { // Do the work here--in this case, upload the images. uploadImages() // Indicate whether the work finished successfully with the Result return Result.success() } }
자바
public class UploadWorker extends Worker { public UploadWorker( @NonNull Context context, @NonNull WorkerParameters params) { super(context, params); } @Override public Result doWork() { // Do the work here--in this case, upload the images. uploadImages(); // Indicate whether the work finished successfully with the Result return Result.success(); } }
doWork()
에서 반환된 Result
는 작업의 성공 여부를 알려주며 실패한 경우 WorkManager 서비스에 작업을 재시도해야 하는지 알려줍니다.
Result.success()
: 작업이 성공적으로 완료되었습니다.Result.failure()
: 작업에 실패했습니다.Result.retry()
: 작업에 실패했으며 재시도 정책에 따라 다른 시점에 시도되어야 합니다.
WorkRequest 만들기
작업을 정의하고 나면 실행을 위해 WorkManager 서비스로 예약해야 합니다. WorkManager에서는 작업을 예약하는 다양한 방법을 제공합니다. 일정한 간격으로 주기적으로 실행되도록 예약하거나 한 번만 실행되도록 예약할 수 있습니다.
어떤 작업 예약 방식을 선택하든 항상 WorkRequest
를 사용합니다. Worker
는 작업 단위를 정의하는 반면 WorkRequest
(및 서브클래스)는 언제, 어떻게 작업이 실행되어야 하는지 정의합니다. 가장 간단한 경우 다음 예와 같이 OneTimeWorkRequest
를 사용하면 됩니다.
Kotlin
val uploadWorkRequest: WorkRequest = OneTimeWorkRequestBuilder<UploadWorker>() .build()
자바
WorkRequest uploadWorkRequest = new OneTimeWorkRequest.Builder(UploadWorker.class) .build();
시스템에 WorkRequest 제출
마지막으로 enqueue()
메서드를 사용하여 WorkRequest
를 WorkManager
에 제출해야 합니다.
Kotlin
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest)
자바
WorkManager .getInstance(myContext) .enqueue(uploadWorkRequest);
작업자가 실행되는 정확한 시간은 WorkRequest
에 사용된 제약조건과 시스템 최적화에 따라 달라집니다.
WorkManager는 이러한 제한사항에 따라 최상의 상태로 작동하도록 설계되었습니다.
다음 단계
이 시작 가이드에서는 기본사항만 간략하게 살펴봅니다. WorkRequest
에는 추가 정보도 포함될 수 있습니다(예: 작업 실행의 제약조건, 작업 입력, 지연, 작업 재시도를 위한 백오프 정책). 다음 섹션 작업 요청 정의에서는 이러한 옵션을 자세히 알아보고 고유 작업 및 반복 작업을 예약하는 방법을 알아봅니다.
추가 리소스
가이드 문서 외에도 시작하는 데 도움이 되는 여러 블로그, Codelab, 코드 샘플이 있습니다.
샘플
- Sunflower: WorkManager를 비롯한 다양한 아키텍처 구성요소의 권장사항을 보여주는 데모 앱
Codelab
- WorkManager를 사용하여 작업하기(Kotlin 및 자바)
- 고급 WorkManager(Kotlin)
블로그
- WorkManager 소개
- WorkManager 기초
- WorkManager 및 Kotlin
- WorkManager 주기성
- WorkManager 맞춤설정 - 기초
- Dagger로 WorkManager 맞춤설정