[Android] WorkManager

민채·2024년 2월 18일
0

Android

목록 보기
9/16

WorkManager

  • 비동기로 백그라운드 작업을 처리
  • WorkManager를 사용하면 앱에서 실행되는 작업을 백그라운드에서 안정적으로 실행할 수 있음
  • 안드로이드 API 수준 14이상에서 사용할 수 있으며 이전 버전의 안드로이드에서도 호환성을 제공

특징

  • Work constraints (작업 제약 조건)
    • 작업을 실행하는 데 최적인 조건을 선언적으로 정의 -> 최적의 조건이 충족될 때까지 작업이 지연
    • 작업 제약 조건을 사용하여 앱이나 기기가 다시 시작되는 경우에도 실행이 보장
    • 어떠한 제한 조건이 충족되면 즉시 실행
  • Robust scheduling (강력한 예약 관리)
    • 일회성 혹은 주기적인 비동기 작업을 예약할 수 있음
    • 작업에 태그 및 이름을 지정하여 고유 작업 및 대체 가능한 작업을 예약하고 작업 그룹을 함께 모니터링하거나 취소할 수 있음
      (작업의 모니터링 및 관리가 가능 -> 작업의 현재 상태 조회가 가능)
    • 예약된 작업은 SQLite 데이터베이스에 저장되며 WorkManager에서 기기를 재부팅해도 작업이 유지되고 다시 예약되도록 보장
    • 절전 기능을 사용하고 권장사항(예: Doze(잠자기) 모드)을 준수하므로 배터리 소모를 걱정하지 않아도 됨
  • Expedited work (신속 처리 작업)
    • 백그라운드에서 즉시 실행할 작업을 예약할 수 있음
    • 사용자에게 중요하고 몇 분 내에 완료되는 작업에 사용
  • Flexible retry policy (유연한 재시도 정책)
    • 경우에 따라 작업이 실패하기도 하는데 이 때 WorkManager는 구성 가능한 지수 백오프 정책을 비롯해 유연한 재시도 정책을 제공
  • Work chaining (작업 체이닝)
    • 작업의 순차적 처리가 가능
    • 복잡한 관련 작업의 경우 직관적인 인터페이스를 사용하여 개별 작업을 함께 체이닝하면 순차적으로 실행할 작업과 동시에 실행할 작업을 제어할 수 있음
  • Built-In threading interoperability (내장 스레딩 상호 운용성)
    • Coroutine 및 RxJava와 원활하게 통합되며 자체 비동기 API를 연결할 수 있는 유연성을 제공

WorkManager 구성

WorkManager

  • 실제로 WorkRequest를 스케줄링하고 실행하며 관리하는 클래스
  • 싱글톤으로 구현되어 있어 getInstance()로 WorkManager의 인스턴스를 받아 사용
  • 인스턴스를 받아와 WorkRequest를 큐에 추가하여 실행

Worker

  • 추상 클래스
  • 클래스를 상속받고 백그라운드에서 실행하고자 하는 코드를 doWork() 메소드에 정의
  • 작업 상태를 나타내는 Result에 정의된 success(), failure(), retry() 등의 메소드를 통해 결과를 반환 -> 반환된 값에 따라서 이후 동작을 결정
    • Result.Sucesss / Result.Failure / Result.Retry

WorkRequest

  • Worker에 정의된 task를 작동시키기 위한 request를 나타냄
  • WorkRequest를 생성할 때 반복 여부, 제약 사항 등의 정보를 담음
  • OneTimeWorkRequest : 한 번만 실행할 작업 요청을 나타내는 클래스
  • PeriodicWorkRequest : 일정 주기로, 여러번 실행할 작업 요청을 나타내는 클래스

WorkState

  • WorkRequst의 id와 해당 WorkRequest의 현재 상태를 담는 클래스
  • WorkState의 상태정보를 이용해서 자신이 요청한 작업의 현재 상태를 파악
    ENQUEUED, RUNNING, SUCCEEDED, FAILED, BLOCKED, CANCLLED의 6개 상태를 가짐

사용법

여기 설명이 너무 잘 되어있다..ㅎㅎ
사실 WorkManager는 이전까지는 딱히 쓸 일이 없어서 접해보지 못 했던 거라 너무 생소하다ㅜㅜ 계속 더 공부해 봐야겠다😂

WorkManager 사용법

참조

profile
코딩계의 떠오르는 태양☀️

0개의 댓글