오늘도 더 나은 코드를 작성하였습니까?

Workmanager 기본 사용법 본문

Android Jetpack Architecture/Workmanager

Workmanager 기본 사용법

hik14 2021. 3. 11. 12:15

 

기본적인 종속항목을 추가한다. 

 

Worker 작업의 정의 

작업은 Worker 클래스를 사용하여 정의한다.

doWork() 메서드는 WorkManager에서 제공하는 백그라운드 스레드에서 비동기적으로 실행됩니다.

 

WorkManager에서 실행할 작업을 만들려면 Worker 클래스를 확장하고 doWork() 메서드를 재정의합니다. 

 

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

 

- context와 작업에 필요한 데이터(workerParms)  파라미터로 받아 클래스를 생성한다.

- doWork()에서 작업을 처리하고, 작업의 결과 상태를 반환한다.

 

doWork에서 반환된 Result의 성공여부는 실패한 경우 작업의 재시도를 해야 하는지 알려준다.

 

  • Result.success(): 작업이 성공적으로 완료되었습니다.
  • Result.failure(): 작업에 실패했습니다.
  • Result.retry(): 작업에 실패했으며 재시도 정책에 따라 다른 시점에 시도되어야 합니다.

WorkRequest 작업요청 정의(언제, 어떻게)

작업을 정의하고 나면 실행을 위해 WorkManager 서비스로 예약해야 합니다.

WorkManager에서는 작업을 예약하는 다양한 방법을 제공합니다.

일정한 간격으로 주기적으로 실행되도록 예약하거나 한 번만 실행되도록 예약할 수 있습니다.

 

어떤 작업 예약 방식을 선택하든 항상 WorkRequest를 사용합니다.

 Worker는 작업 단위를 정의하는 반면 WorkRequest(및 서브클래스)는 언제, 어떻게 작업이 실행되어야 하는지 정의합니다.

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

 

시스템에 WorkRequest 작업요청 제출

WorkManager
    .getInstance(myContext)
    .enqueue(uploadWorkRequest)

 

작업자가 실행되는 정확한 시간은 WorkRequest사용된 제약조건과 시스템 최적화에 따라 달라집니다. WorkManager는 이러한 제한사항에 따라 최상의 상태로 작동하도록 설계되었습니다.