2022.11.19 - [Android/AAC, MVVM] - [Android] 안드로이드 WorkManager 활용한 주기적 백그라운드 작업
WorkManager를 사용하면 백그라운드 작업을 효율적으로 처리할 수 있다.
이번 글에서는 Dagger Hilt를 사용해 의존성 주입하는 방법에 대해 작성하려고 한다.
2021.06.03 - [Android/AAC, MVVM] - [Android] Dagger Hilt 사용하여 의존성 주입(DI) 하기
Hilt에 대한 설명, Dependency 는 위 글에서 확인할 수 있다.
1️⃣ Dependency 추가
// WorkManager Hilt
implementation 'androidx.hilt:hilt-work:1.0.0'
kapt "androidx.hilt:hilt-compiler:1.0.0"
기존의 Hilt Dependency 에
추가로 위 Dependency 를 추가해준다.
2️⃣ HiltWorkerFactory
@HiltAndroidApp
class ExampleApplication : Application(), Configuration.Provider {
@Inject lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
Application 클래스가 Configuration.Provider 인터페이스를 구현하도록 하고 HiltWorkFactory 인스턴스를 삽입하여 WorkManager 에 전달한다.
3️⃣ Worker Class 정의
@HiltWorker
class ExampleWorker @AssistedInject constructor(
@Assisted appContext: Context,
@Assisted workerParams: WorkerParameters,
workerDependency: WorkerDependency
) : Worker(appContext, workerParams) { ... }
@HiltWorker, @AssistedInject 어노테이션을 사용하여 Worker를 생성한다.
Worker 객체에는 @Singleton 또는 범위가 지정되지 않은 결합만 사용할 수 있다.
또한 다음과 같이 Context 및 WorkerParameters 종속 항목에 @Assisted 어노테이션을 지정한다.
@Assisted 어노테이션을 사용하면 컴파일 타임이 아닌, 런타임시 Factory 에서 생성된 데이터를 넘겨받을 수 있다.
4️⃣ Manifest
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
이제 커스텀한 Factory를 Worker에 제공하기 위해
기본 제공자를 비활성화 해준다.
이제 WorkManager에서 Hilt를 통한 의존성 주입을 진행할 수 있다.
참고
https://developer.android.com/training/dependency-injection/hilt-jetpack#workmanager
https://developer.android.com/jetpack/androidx/releases/work#2.6.0-alpha01