개발/안드로이드
HiltWorker사용시 Could not create Worker 오류 해결
장모
2022. 12. 13. 11:04
Hilt로 WorkManager를 Inject하려면 WorkerFactory를 만들어서 넘겨줘야한다.
@HiltAndroidApp
class ExampleApplication : Application(), Configuration.Provider {
@Inject lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
workManager 2.6.0-alpha01부터는 startup을 사용해 초기화하기 때문에
AndroidManifest에서 startup을 사용하지 않게 변경하거나 startup에서 workManager를 초기화하지 않도록 해야한다. 가이드문서에서는 아래 코드로 링크가 걸려있다.
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities=\"${applicationId}.androidx-startup"
android:exported="false"
tools:node=\"merge">
<!-- If you are using androidx.startup to initialize other components -->
<meta-data
android:name="androidx.work.impl.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
<!-- If you want to disable android.startup completely. -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
그런데 두가지 방법 중 위의 방법으로는 안된다. 왜냐면 2.7.0-alpha01부터 패키지가 변경되었기 때문! impl을 제거하고 아래처럼 작성하면 된다.
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities=\"${applicationId}.androidx-startup"
android:exported="false"
tools:node=\"merge">
<!-- If you are using androidx.startup to initialize other components -->
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>