2022.11.19 - [Android/AAC, MVVM] - [Android] 안드로이드 WorkManager 활용한 주기적 백그라운드 작업
[Android] 안드로이드 WorkManager 활용한 주기적 백그라운드 작업
https://developer.android.com/topic/libraries/architecture/workmanager?hl=ko 앱 아키텍처: 데이터 영역 - WorkManager로 작업 예약 - Android 개발자 | Android Developers 데이터 영역 라이브러리에 관한 이 앱 아키텍처 가이
hanyeop.tistory.com
WorkManager를 사용하면 백그라운드 작업을 효율적으로 처리할 수 있다.
이번 글에서는 Dagger Hilt를 사용해 의존성 주입하는 방법에 대해 작성하려고 한다.
2021.06.03 - [Android/AAC, MVVM] - [Android] Dagger Hilt 사용하여 의존성 주입(DI) 하기
[Android] Dagger Hilt 사용하여 의존성 주입(DI) 하기
0️⃣ 의존성 주입(DI) 이란? 먼저, 의존성이란 A 클래스가 자체적인 B 클래스를 구성하는 것을 말한다. 구글의 예시를 통해 알아보자. 그림과 같이 Car라는 클래스가 Engine 라는 클래스를 가져다 쓰
hanyeop.tistory.com
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