[10분 테코톡] 오이의 안드로이드 백그라운드 작업
- 백그라운드 작업은 앱이 화면에 보이지 않아도 워커 스레드에서 실행되는 작업으로 정의됩니다. ⚙️
- 백그라운드 작업은 즉시 실행, 장기 실행, 지연 실행의 세 가지 주요 유형으로 나뉘며, 각 유형에 따라 적절한 처리 방식이 필요합니다. 📊
viewModelScope에서 무거운 작업을 처리할 경우, 메모리 압박이나 배터리 절약 모드(Doze Mode, App Standby)로 인해 OS에 의해 작업이 강제 종료될 수 있습니다. 💥
- 안드로이드 OS는
ActivityManagerService를 통해 앱 프로세스를 관리하며, 메모리 부족 시 Kernel Swap Daemon, Low Memory Killers, OOM Killer를 순차적으로 작동시켜 프로세스를 종료합니다. 💀
- WorkManager는 OS의 제약을 우회하여 백그라운드 작업을 안정적으로 처리할 수 있도록 돕는 안드로이드 API입니다. 🤝
- WorkManager는 작업 요청을 Room 기반 데이터베이스에 저장하고, 작업의 상태(ENQUEUED, RUNNING, SUCCESS 등)를 기반으로 작업을 관리합니다. 💾
- WorkManager는 Wi-Fi 연결, 충전 중, 배터리 충분 등 특정
Constraints (제약 조건)이 만족될 때 작업을 실행하도록 OS에 요청할 수 있습니다. 🚦
- WorkManager는 작업 실패 시
Backoff Policy (선형 또는 지수)를 통해 자동으로 재시도를 관리하며, 최소 재시도 간격은 10초입니다. 🔄
- WorkManager는 여러 작업을
DAG (방향성 비순환 그래프) 형태로 체이닝하여 작업 간의 정합성을 보장하고, 선행 작업의 성공 여부에 따라 후행 작업을 실행합니다. 🔗
- WorkManager는 최신
JobScheduler부터 구형 AlarmManager, BroadcastReceiver까지 내부적으로 다양한 OS 스케줄링 API를 사용하여 하위 호환성을 보장합니다. 📱
- WorkManager는 장기 실행, 사용자 알림, 상태 추적, 주기적 작업 등 다양한 백그라운드 시나리오에 적용 가능하며, 대부분의 현대 안드로이드 백그라운드 작업에 권장됩니다. ✅
- 개발자는 백그라운드 작업이 언제든 OS에 의해 취소될 수 있음을 인지하고, WorkManager를 통해 OS와 협력하여 사용자에게 더 나은 서비스를 제공해야 합니다. 💡
데브허브 | DEVHUB | [10분 테코톡] 오이의 안드로이드 백그라운드 작업