WorkManager에 대하여

seunghee song·2024년 3월 17일

우리가 흔히 앱 게임을 다운로드 받아 처음 실행할 때 해당 앱에 필요한 다양한 파일들을 다운받아야하는데 그때 한번씩 보이는 말이 있다.
'배경화면으로 돌아가도 다운로드가 계속 진행된다' 라는 말이다.
이를 가능하게 해주는 것이 바로 "WorkManager"이다.

WorkManager이란?

지속적인 작업에 필요한 솔루션이다.
앱이 다시 시작되거나 재부팅시 작업이 예약된 채로 남아있으면 그 작업은 유지되고 대부분의 백그라운드 처리는 지속적인 작업으로 처리하므로 안드로이드에서 권장하는 기본 API라고 한다.

위의 사진은 WorkManager의 작업 유형 및 흐름도이다.

WorkManager의 작업유형

1) Immediate: 즉시 시작해야하고 곧 완료해야하는 작업, 신속하게 처리 가능
2) Long Running: 더 오래 실행될 수 있는 작업
3) Deferrable: 나중에 시작하고 주기적으로 실행될 수 있는 지연가능한 예약 작업

WorkManager의 이점

1) 작업 제약조건: 작업을 실행하는데 최적의 조건을 선언적으로 정의할 수 있다.
2) 강력한 예약관리: 예약기간동안 반복적으로 실행할 작업 예약, 예약된 작업은 내부적으로 관리되는 SQLite 데이터베이스에 저장되며 기기 재부팅해도 작업이 유지되고 다시 예약되도록 보장한다.
3) 신속 처리 작업: 백그라운드에서 즉시 실행할 작업 예약해 사용자에게 중요한 작업을 신속하게 처리할 수 있다.
4) 유연한 재시도 정책: 작업이 실패할 경우 workManager는 백오프 정책을 제공한다.
5) 작업 체이닝: 복잡한 작업의 경우 직관적인 인터페이스를 사용해 개별작업을 함께 체이닝하면 순차적으로 실행할 작업과 동시에 실행할 작업을 제어할 수 있다.

사용방법


이 코드에서는 OneTimeWorkRequest를 사용해 단일 작업을 예약한다. 이는 이 작업이 한번 실행되고 완료되면 다시 실행되지 않는다는 것을 의미한다.
만약 이 작업을 지속적으로 실행하고 싶다면 PeriodicWorkRequestBuilder로 일정 시간마다 작업 실행을 예약할 수 있다.

이 WorkManager작업은 workA가 가장먼저 스케쥴링되며 실행되고 동시에 chain2에서 workC가 실행된다. workA 완료 후 workB가 실행되며 workC 완료 후 workD가 실행된다. 모든 chain1,2작업이 끝나면 그제서야 workE가 실행된다.
(호출 순서 A->C->B->D->E)

작업 제약 조건 설정하기

설정가능한 다양한 제약조건들

이 코드에서 설정한 제약조건은 와이파이 연결이 되었을때, 배터리 수준이 낮지 않을 때, 기기가 충전중일때, 기기가 유휴상태일때, 기기의 저장공간이 충분할 때만 실행되도록 제약조건을 설정해주었다.
이 제약조건을 workA에 적용하고 와이파이를 끈 후 실행해 보았다.
그 결과 (C -> D) 만 로그가 찍혔다.
workA작업이 와이파이가 연결되어 있지 않아 실행되지 못하였고 그에 따라 workB도 실행되지 못해 다른 chain에 스케쥴링된 workC, workD만 실행된 것이고 두 체인 중 chain1이 완료되지 않았기에 workE는 실행되지 못했다.

이러한 workManager은 백엔드 서비스에 로그 또는 분석 전송, 주기적으로 프로세스 종료와 관계없이 서버와 애플리케이션 데이터 동기화 등과 같은 경우 활용될 수 있다.

궁극적으로 workManager은 시스템이 최적의 시간에 작업을 실행하여 배터리 소모를 최소화하고 장치가 다시 시작되어도 계속 이어서 작업을 실행할 수 있도록 자동 처리를 목적으로 하고있다.

profile
안드로이드 개발자

0개의 댓글