Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

작업 취소 및 중지

이전에 큐에 추가한 작업을 더 이상 실행하지 않으려면 작업을 취소하도록 요청할 수 있습니다. 가장 간단한 방법은 id를 사용한 상태로 WorkManager.cancelWorkById(UUID)를 호출하여 단일 WorkRequest를 취소하는 것입니다.

Kotlin

    WorkManager.cancelWorkById(workRequest.id)
    

자바

    WorkManager.cancelWorkById(workRequest.getId());
    

내부적으로 WorkManager는 작업의 State를 확인합니다. 작업이 이미 완료되었다면 아무런 변화가 없습니다. 그렇지 않은 경우 상태가 CANCELLED로 변경되고 향후에 작업이 실행되지 않습니다. 이 작업에 종속된 모든 WorkRequests도 상태가 CANCELLED로 변경됩니다.

또한 작업이 현재 RUNNING 상태인 경우에도 작업자는 ListenableWorker.onStopped() 호출을 수신합니다. 이 메서드를 재정의하여 잠재적으로 필요한 정리 작업을 처리할 수 있습니다. 자세한 내용은 아래에서 자세히 설명합니다.

WorkManager.cancelAllWorkByTag(String)을 사용하여 태그를 기준으로 WorkRequest를 취소할 수도 있습니다. 이 메서드는 관련 태그를 가진 모든 작업을 취소합니다. 또한 WorkManager.cancelUniqueWork(String)을 사용하여 고유한 이름을 가진 모든 작업을 취소할 수 있습니다.

실행 중인 작업자 중지

WorkManager에서 실행 중인 작업자를 중지할 수 있는 몇 가지 이유는 다음과 같습니다.

  • 개발자가 명시적으로 작업자 취소를 요청한 경우(예: WorkManager.cancelWorkById(UUID) 호출)
  • 고유 작업에서 ExistingWorkPolicyREPLACE로 설정한 상태로 새로운 WorkRequest를 명시적으로 큐에 넣은 경우. 이전 WorkRequest는 종료된 것으로 즉시 간주됨.
  • 작업의 제약 조건이 더 이상 충족되지 않는 경우
  • 시스템에서 어떤 이유로 작업을 중지하라고 앱에 지시한 경우. 실행 기한이 10분을 초과했을 때 발생함. 작업이 나중에 다시 시도되도록 예약됨.

이러한 조건에서 작업자는 ListenableWorker.onStopped() 호출을 수신합니다. OS에서 앱 종료가 결정되면 개발자는 정리 작업을 실행한 다음 그 결정에 따라 작업자를 종료해야 합니다. 예를 들어 그 시점에 데이터베이스와 파일에 열려 있는 핸들을 가능한 한 빨리 닫아야 합니다. 이미 중지되었는지 확인하려고 하면 ListenableWorker.isStopped()를 확인하면 됩니다. onStopped()가 호출된 후 Result를 반환하여 개발자가 작업 완료를 알리더라도 작업자가 이미 중지된 상태로 간주되기 때문에 WorkManager는 그 Result를 무시합니다.

WorkManager의 스레딩 섹션에서 onStopped() 처리 방법의 예를 확인할 수 있습니다.