Unit 6 (끝)

jiwon·2022년 2월 10일
0

코틀린

목록 보기
16/16
post-thumbnail
post-custom-banner

함수를 백그라운드에서 실행하려면 WorkManager가 필요하다.

알아야 할 WorkManager 클래스들

  • Worker: 백그라운드에서 실행하고자 하는 코드를 여기에 입력. 이 클래스를 확장하고 doWork() 메서드를 재정의한다.
  • WorkRequest: 작업 실행 요청. WorkRequest를 만드는 과정에서 Worker를 전달한다.
  • WorkManager: 실제로 WorkRequest를 예약하고 실행하는 클래스. 지정된 제약 조건을 준수하면서 시스템 리소스에 부하를 분산하는 방식으로 WorkRequest를 예약한다.

두 가지 WorkRequest 유형

  • OneTimeWorkRequest: 한 번만 실행되는 WorkRequest
  • PeriodicWorkRequest: 일정 주기로 반복하는 WorkRequest

작업 체이닝

WorkManager를 사용하면 순서대로 실행되거나 동시에 실행되는 별도의 WorkerRequest를 만들 수 있다. 실습의 작업 체인을 나타내면 대충 이렇다. 한 WorkRequest의 출력이 체인 내 다음 WorkRequest의 입력이 된다.

WorkerRequest 하나인 경우

        val blurRequest = OneTimeWorkRequestBuilder<BlurWorker>()
            .setInputData(createInputDataForUri())
            .build()

        workManager.enqueue(blurRequest)

WorkRequest 객체 세 개(workA, workB, workC)가 있는 경우

val continuation = workManager.beginWith(workA)

continuation.then(workB) new WorkContinuation instance
        .then(workC)
        .enqueue()  

workManager.enqueue()를 호출하는 대신 workManager.beginWith()를 호출한다.

고유 작업 체인
작업 체인을 한 번에 하나씩만 실행해야 하는 경우가 있다. 이렇게 하려면 beginWith 대신 beginUniqueWork를 사용한다.

사용 예

var continuation = workManager
            .beginUniqueWork(
                IMAGE_MANIPULATION_WORK_NAME,
                ExistingWorkPolicy.REPLACE,
                OneTimeWorkRequest.from(CleanupWorker::class.java)
            )
profile
개발 공부합니다. 파이팅!
post-custom-banner

0개의 댓글