개발 공부/안드로이드

[Android] WorkManager - 1

밍혁팟 2022. 12. 23. 11:20

WorkManager란?

WorkManager는 지속적인 작업에 권장되는 솔루션이다.

앱이 다시시작 또는 재부팅 될때 작업이 유지된다 (작업이 예약되있을때)

지속적인 작업을 통해 가장 잘 처리되는 백그라운드 처리 기본 API


지속적인 작업의 유형

  • Immediate (즉시): 즉시 시작하고 바로 완료해야하는 작업 (1회)
    • OnTimeWorkRequest 및 Worker.
    • 신속 처리 작업의 경우 OnTimeWorkRequest에서 SetExpendited()를 호출
  • Long Running (장기 실행): 더 오래 실행될 수 있는 작업 (1회 또는 주기적, 10분 이상)
    • 모든 WorkRequest 또는 Worker.Worker에서 setForeground()를 호출하여 알림을 처리
  • Deferrable (지연 가능): 나중에 시작하며 주기적으로 실행될 수 있는 예약된 작업 (1회 또는 주기적)
    • PeriodicWorkRequest 및 Worker

지속적인 작업의 유형을 그림으로 나타낸 사진.

특징

  • 작업 제약 조건: 작업을 실행하는 데 최적인 조건을 선언적으로 정의합니다.
    • EX) 기기가 무제한 네트워크에 있을경우 -> 유후(idle) 상태 또는 배터리가 충분할때 실행
  • 강력한 예약 관리
    • 가변 일장 예약 기간을 통해 한번 또는 반복적으로 실행할 작업을 예약 가능
    • 작업에 태그와 이름을 지정하여 고유 작업 및 대체 가능한 작업을 예약하고 작업 그룹을 함께 모니터링하거나 취소가능
    • 작업은 모두 SQLite에 저장되며 기기를 재부팅해도 작업이 유지 되고 다시 예약되도록 보장
    • 절전 기능을 사용하고 권장사항을 준수하므로 배터리 소모를 걱정하지 않아도 됨
  • 신속 처리 작업
    • 백그라우드에서 즉시 실행할 작업을 예약 가능
    • 사용자에게 중요하고 몇 분 내에 완료되는 작업에 사용
  • 유연한 재시도 정책
    • 경우에 따라 실패하기도 하는데 지수 백오프 정책을 비롯해 유연한 재시도 정책을 제공
  • 작업 체이닝
    • 복잡한 관련 작업의 경우 직관적인 인터페이스를 사용하여 개별 작업을 함께 체이닝하면 순차적으로 실행할 작업과 실행할 작업을 제어 가능
    • 각 작업에 대해 작업의 입력 데이터와 출력 데이터를 정의
    • 작업을 함께 체이닝하면 자동으로 한 작업의 출력 데이터를 다음 작업으로 전달
  • 내장 스레딩 상호 운용성
    • Coroutine 및 RxJava와 원할하게 통합되며 자체 비동기 API를 연결할 수 있는 유연성을 제공

안정적인 작업에 사용하기

사용자가 화면을 벗어나 이동하거나, 앱이 종료되거나, 기기가 다시 시작되더라도 안정적으로 실행되어야 하는 작업을 대상으로 설계되었습니다.

  • 백엔드 서비스에 로그 또는 분석 전송
  • 주기적으로 서버와 애플리케이션 데이터를 동기화

다른 API와의 관계

  • Corourines
    • 지속적이지 않은 모든 비동기 작업
    • 기본 스레드를 벗어나는 표준 방식이지만 앱이 종료된후에는 메모리를 남겨둠 
  • AlarmManager
    • 알람에만 사용
    • 잠자기 모드인 기기의 절전모드를 해제 (전원 및 리소스 관리 측면에선 비효율)

출처: Android 공식 문서 (https://developer.android.com/topic/libraries/architecture/workmanager)