안드로이드 학습(Kotlin)

21. WorkManager 활용 예시

리저브콜드브루 2025. 2. 7. 17:47
728x90
반응형

WorkManager

  • API 14 이상 모든 버전에서 동작
  • Doze 모드에서도 실행 가능 (Android 6.0 이상)
  • 자동으로 재시작 지원
  • 딜레이 및 주기적 작업 가능
  • Foreground Service 없이도 백그라운드 작업 가능
  • 장기 실행 작업(데이터 동기화, 파일 업로드)에 적합한 솔루션

 

예제

WorkManager Gradle 설정

dependencies {
    implementation "androidx.work:work-runtime:2.7.1"
}

 

Worker 클래스 생성

Worker를 상속받아 작업 정의

class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {

    override fun doWork(): Result {
        Log.d("WorkManager", "데이터 동기화 실행 중...")

        // 여기에 데이터 동기화 로직 추가

        return Result.success() // 작업 성공
    }
}
  • doWork() 내부에 백그라운드 작업 구현
  • Result.success(), Result.failure(), Result.retry() 변환 가능

 

Work 요청 및 실행

주기적으로 실행되는 Work 요청

val workRequest = PeriodicWorkRequestBuilder<SyncWorker>(15, TimeUnit.MINUTES)
    .build()

WorkManager.getInstance(context).enqueue(workRequest)
  • PeriodicWorkRequestBuilder<>로 반복 작업 설정 가능
  • 최소 15분 주기로 실행 가능

 

WorkManager 옵션

  • setInitialDelay(): 작업을 일정 시간 후에 시작
  • setBackoffCriteria(): 실패 시 재시도 간격 설정
  • setConstraints(): 네트워크 상태, 충전 여부 등 조건 설정 가능

네트워크 연결상태에서만 실행하도록 설정

val constraints = Constraints.Builder()
    .setRequiredNetworkType(NetworkType.CONNECTED)
    .build()

val workRequest = OneTimeWorkRequestBuilder<SyncWorker>()
    .setConstraints(constraints)
    .build()
  • WorkManager는 네트워크 상태 등을 고려한 백그라운드 작업에 최적
  • 백그라운드에서 지속적으로 실행되는 작업은 WorkManager를 활용
728x90
반응형