WorkManager

BongKu·2023년 6월 28일
0

Android

목록 보기
11/30
post-thumbnail

WorkManager ?

안드로이드 Jetpack 라이브러리 일부로, 백그라운드에서 실행되는 작업을 관리하는 도구입니다.

주로, 데이터 동기화, 데이터베이스 백업, 로그 업로드 등의 작업을 백그라운드에서 주기적으로 실행하고 싶을 때 유용합니다.

사용

종속 항목 추가

implementation("androidx.work:work-runtime-ktx:2.7.1")

실행할 작업 정의


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()
   }
}

WorkManager에서 실행할 작업은 Worker 클래스를 사용하여 정의 합니다. doWork() 메서드는 WorkManager에서 제공하는 백그라운드 스레드에서 비동기적으로 실행됩니다. doWork() 내부에 백그라운드로 실행할 작업을 구현해주면 됩니다.

doWork() 에서 반환된 Result 는 작업의 성공 여부를 알려주며, 실패한 경우 WorkManager 서비스에 작업을 재시도해야 하는지 알려줍니다.

WorkRequest 만들기

val uploadWorkRequest: WorkRequest =
   OneTimeWorkRequestBuilder<UploadWorker>()
       .build()

실행을 위해 WorkManager 서비스로 예약합니다. 주기적으로 실행 할 수 있고, 한 번만 실행 되도록 예약할 수 있습니다. 위 예제는 한 번만 실행되도록 한 예제입니다.

주기적으로 실행되도록 예약하려면 아래와 같이 하면 됩니다.

val myWork = PeriodicWorkRequest.Builder(
       GetCoinPriceRecentContractedWorkManager::class.java,
       		15,
            TimeUnit.MINUTES
        ).build()

PeriodicWorkRequest.Builder() 는 주기적인 작업을 생성하기 위한 빌더 객체를 생성합니다.
15 는 작업의 반복 주기를 나타냅니다.
TimeUnit.MINUTES는 반복 주기의 시간 단위를 나타냅니다.

시스템에 WorkRequest 제출

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

enqueue() 메서드를 사용하여 WorkRequestWorkManager에 제출합니다.

다음과 같이 제약을 걸어어 제출할 수도 있습니다.

WorkManager.getInstance(this).enqueueUniquePeriodicWork(
     "GetCoinPriceRecentContractedWorkManager",
      ExistingPeriodicWorkPolicy.KEEP,
      myWork
)

enqueueUniquePeriodicWork()는 주기적인 작업을 예약하는 메서드입니다. 이 메서드는 중복되는 작업을 방지하기 위해 작업을 고유하게 식별하는 데 사용됩니다.

GetCoinPriceRecentContractedWorkManager 는 작업의 고유한 이름 입니다.

ExistingPeriodicWorkPolicy.KEEP 는 작업이 이미 예약되어 있는 경우에 대한 정책입니다. KEEP은 기존 작업을 유지하고 새로운 작업을 추가하지 않음을 의미합니다.

myWork는 앞에서 생성한 PeriodicWorkRequest 를 전달합니다.

참고
https://developer.android.com/topic/libraries/architecture/workmanager/basics?hl=ko

profile
화이팅

0개의 댓글