WorkManager 사용 이유
- 앱 종료 시에도 백그라운드 작업을 안정적으로 처리 가능
- Android 12 이상의 포그라운드 서비스 제한을 피할 수 있음
- 백그라운드 작업의 조건을 설정하고, 작업이 완료될 때까지 안정적으로 실행 가능
WorkManager 사용 상황
- 장기 실행 작업
- 서버와의 데이터 동기화나 백업 작업처럼 앱이 종료되어도 계속해서 완료되어야 하는 작업에 적합
- 조건이 필요한 작업
- 네트워크 연결, 배터리 충전 상태 등 특정 조건에 따라 작업을 실행할 때
- 주기적인 작업
- 반복적으로 실행되어야 하는 작업
- 예를 들어 15분마다 데이터 동기화 같은 작업
- 백업/동기화/로그 업로드
WorkManager 사용 방법
- 의존성 추가
implementation "androidx.work:work-runtime-ktx:${Versions.Worker}"
- Worker 클래스 정의
Worker 클래스를 상속받아 실행할 작업을 정의
class MintWorker(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams) {
override fun doWork(): Result {
return try {
mint()
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
private fun mint() {
}
}
- 작업 요청 생성, 작업 스케줄링
val workRequest = OneTimeWorkRequestBuilder<MintWorker>().build()
WorkManager.getInstance(applicationContext).enqueue(workRequest)
val periodicWorkRequest = PeriodicWorkRequestBuilder<MintWorker>(15, TimeUnit.MINUTES).build()
WorkManager.getInstance(context).enqueue(periodicWorkRequest)
OneTimeWorkRequest PeriodicWorkRequest 차이점
| 특성 | OneTimeWorkRequest | PeriodicWorkRequest |
|---|
| 목적 | 한 번만 실행되는 작업 | 주기적으로 반복되는 작업 |
| 반복 여부 | 한 번만 실행 | 최소 15분 간격으로 반복 실행 |
| 용도 예시 | 데이터 다운로드, 백업 등 | 주기적 데이터 동기화, 로그 전송 |
| 최소 반복 간격 | 없음 | 최소 15분 |
| 사용 시기 | 단발성 작업 | 반복 작업이 필요한 경우 |
결론
OneTimeWorkRequest: 단발성 작업에 사용
PeriodicWorkRequest: 주기적인 작업에 사용