개발 일기

WorkManager ? 본문

Client/안드로이드

WorkManager ?

이건욱

사용이유 :)


WorkManager API를 사용하면 앱이 종료되거나 기기가 다시 시작되어도 실행 예정인 지연 가능한 비동기 작업을 쉽게 예약할 수 있습니다.

 

 

WorkManager는 앱 프로세스가 사라지더라도 안전하게 종료되어야 하는 진행 중인 백그라운드 작업 또는 즉시 실행해야 하는 작업을 대상으로 하지 않습니다.

 

적합한 솔루션을 알아보려면 백그라운드 처리 가이드를 확인해 보세요!

 

주요 기능

 

  1. API 14 이전 버전과 호환성 
  2. 네트워크 가용성 또는 충전 상태와 같은 작업 제약 조건 추가 ( 네트워크가 연결이 됬을 때 혹은 충전 , 미 충전 상태에 따라 결정이 가능합니다. )
  3. 비동기 일회성 작업 또는 주기적으로 실행되는 작업 예약
  4. 예약된 작업 모니터링 및 관리
  5. 작업 체이닝

  6. 앱 또는 기기가 다시 시작되는 경우에도 작업 실행을 보장

  7. 잠자기 모드와 같은 절전 기능 지원

부가 설명 


API 23 이상을 사용하는  기기에서는 JobScheduler 사용

API 14~22 사용하는 기기에서는 BroadcastReceiver + AlarmManager 조합을 사용

주기적으로 실행되는 작업을 예약을 할수 있지만 15분 주기가 최소입니다. 

 

 

WorkManager 기초

- 해당 내용은 기초만 다루고 있습니다. 더 심화적으로 알고싶으시면 WorkManager 링크를 가서 봐주세요 !

 

 

제일 먼저 프로젝트에 WorkManager 추가를 해야합니다.

 

dependencies {
      def work_version = "2.3.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"
      }
    

 

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 task finished successfully with the Result
            return Result.success()
        }
    }

리턴 값으로는 총 세가지 있으며 작업에 관해서 WorkManager에게 알립니다.

  • Result.success()를 통해 성공적으로 완료됨

  • Result.failure()를 통해 실패함

  • Result.retry()를 통해 나중에 다시 시도해야 함

 

다음으로 작업을 실행하는 방법에 대해서 말씀드리겠습니다.

 

WorkRequest을 통해서 작업이 어떻게 실행되어야 하는지 알려줍니다.

 

작업은 두가지 방향으로 일회성이거나 주기적으로 계속 실행을 시킬수가 있습니다.

 

일회성 ( OneTimeWorkRequest ) 을 사용하고 주기적일때는 (PeriodicWorkRequest) 을 사용합니다.

반복작업에 대해서 더 자세한 내용은 링크를 걸어드리겠습니다.

 

다음으로 코드는 :)

    val uploadWorkRequest = OneTimeWorkRequestBuilder<UploadWorker>()
            .build()
    WorkManager.getInstance(myContext).enqueue(uploadWorkRequest)

 

더 자세항 방법은 여기에 링크로 달아드리겠습니다.

 

리뷰 :)

WorkManager 나오기전에는 AlarmManager , JobScheduler , Firebase JobDispatcher 을 사용을 했었는데 나오면서 더 편한 방법으로 해결책이 나와 좋았습니다.!

 

여기에 나오지 않은 여러가지 기능 ( 체인 등 ) 을 통해서 구현하는것도 알아두면 좋을 거 같습니다 !

'Client > 안드로이드' 카테고리의 다른 글

Databinding ?  (0) 2020.03.21
Android Manifest ?  (0) 2020.03.21
LiveData ?  (0) 2020.03.18
Picasso , Glide , Fresco  (0) 2020.03.16
android 4대 구성요소?  (0) 2020.03.16
Comments