Android WorkManager

오리·2025년 1월 9일
0

WorkManager 사용 이유

  • 앱 종료 시에도 백그라운드 작업을 안정적으로 처리 가능
  • Android 12 이상의 포그라운드 서비스 제한을 피할 수 있음
  • 백그라운드 작업의 조건을 설정하고, 작업이 완료될 때까지 안정적으로 실행 가능

WorkManager 사용 상황

  • 장기 실행 작업
    • 서버와의 데이터 동기화나 백업 작업처럼 앱이 종료되어도 계속해서 완료되어야 하는 작업에 적합
  • 조건이 필요한 작업
    • 네트워크 연결, 배터리 충전 상태 등 특정 조건에 따라 작업을 실행할 때
  • 주기적인 작업
    • 반복적으로 실행되어야 하는 작업
    • 예를 들어 15분마다 데이터 동기화 같은 작업
  • 백업/동기화/로그 업로드
    • 안정적인 백그라운드 작업을 요구하는 경우

WorkManager 사용 방법

  1. 의존성 추가
implementation "androidx.work:work-runtime-ktx:${Versions.Worker}"
  1. 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() {
        // 업로드 로직
    }
}
  1. 작업 요청 생성, 작업 스케줄링

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 차이점
    특성OneTimeWorkRequestPeriodicWorkRequest
    목적한 번만 실행되는 작업주기적으로 반복되는 작업
    반복 여부한 번만 실행최소 15분 간격으로 반복 실행
    용도 예시데이터 다운로드, 백업 등주기적 데이터 동기화, 로그 전송
    최소 반복 간격없음최소 15분
    사용 시기단발성 작업반복 작업이 필요한 경우

    결론

    • OneTimeWorkRequest: 단발성 작업에 사용
    • PeriodicWorkRequest: 주기적인 작업에 사용

0개의 댓글