【发布时间】:2021-08-05 19:45:24
【问题描述】:
我正在尝试向 WorkManager 注入 Hilt。 首先我实现文档:
使用类中的@HiltWorker 注解和Worker 对象的构造函数中的@AssistedInject 注入一个Worker。您只能在 Worker 对象中使用 @Singleton 或无范围绑定。您还必须使用 @Assisted 注释 Context 和 WorkerParameters 依赖项:
@HiltWorker
class RetreiveQuestionWorkManager @AssistedInject constructor(
@Assisted val appContext : Context,
@Assisted val workerParameters: WorkerParameters,
val questionDao: QuestionDao,
val questionCacheMapper: QuestionCacheMapper)
: CoroutineWorker(appContext, workerParameters) {
...
}
然后我从文档中应用了这个:
然后,让您的 Application 类实现 Configuration.Provider 接口,注入 HiltWorkFactory 的实例,并将其传递给 WorkManager 配置,如下所示:
@HiltAndroidApp
class MyApp : Application(), Configuration.Provider {
@Inject lateinit var workerFactory: HiltWorkerFactory
override fun getWorkManagerConfiguration() =
Configuration.Builder()
.setWorkerFactory(workerFactory)
.build()
}
最后,我从文档中处理了这个注释:
注意:由于这会自定义 WorkManager 配置,因此您还必须按照 WorkManager 文档中的规定从 AndroidManifest.xml 文件中删除默认初始化程序。
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
但我收到此错误:
java.lang.RuntimeException: Unable to start activity ComponentInfo{mohalim.contest.alarm/mohalim.contest.alarm.ui.splash.SplashActivity}: kotlin.UninitializedPropertyAccessException: lateinit property workerFactory has not been initialized
...
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property workerFactory has not been initialized
...
【问题讨论】:
-
您使用的是哪个 workmanager 版本?您是否将应用程序类添加到清单中?您是否添加了所有必要的依赖项?
-
我正在使用工作管理器版本 2.7.0-alpha05,我将我的应用程序类添加到清单中,这是我使用的刀柄依赖项 implementation("com.google.dagger:hilt-android :$hilt_version") kapt("com.google.dagger:hilt-android-compiler:$hilt_version") 实现("androidx.hilt:hilt-work:1.0.0") kapt("androidx.hilt:hilt-compiler :1.0.0")
标签: android kotlin android-workmanager dagger-hilt