본문 바로가기

카테고리 없음

[Android] WorkManager

[Android] WorkManager

 

 

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

https://developer.android.com/guide/background