본문 바로가기
개발 관련 공부/코틀린

Unit 6 (끝)

by 슴새 2022. 9. 14.
반응형
이 포스트는 2021.12~2022.09 기간동안 벨로그에 작성한 글을 티스토리에 옮겨 적은 것입니다.

함수를 백그라운드에서 실행하려면 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)
            )
반응형

'개발 관련 공부 > 코틀린' 카테고리의 다른 글

Unit 5-2  (0) 2022.09.14
Unit 5-1  (0) 2022.09.14
Unit 4-2  (0) 2022.09.14
Unit 4-1  (0) 2022.09.14
Unit 3-4  (0) 2022.09.14

댓글