경험의 기록

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

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading