使用DelegatingWorker时WorkManager仍未正确初始化问题求助
解决WorkManager未正确初始化的问题
根据错误提示,问题出在你已经禁用了WorkManager的默认初始化器,但既没有手动调用WorkManager.initialize,也没有让Application类实现Configuration.Provider接口,导致WorkManager无法完成初始化。结合你使用Hilt和DelegatingWorker的场景,给出以下两种解决方案:
方案一:让Application实现Configuration.Provider(推荐)
给你的Application类添加@HiltAndroidApp注解,并实现Configuration.Provider接口,通过Hilt注入HiltWorkerFactory来配置WorkManager:
@HiltAndroidApp class YourApplication : Application(), Configuration.Provider { @Inject lateinit var hiltWorkerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration(): Configuration { return Configuration.Builder() .setWorkerFactory(hiltWorkerFactory) .build() } }
方案二:手动在Application onCreate中初始化WorkManager
如果不想让Application实现接口,也可以在onCreate方法中手动初始化WorkManager,通过Hilt的EntryPoint获取WorkerFactory:
@HiltAndroidApp class YourApplication : Application() { override fun onCreate() { super.onCreate() // 通过EntryPoint获取HiltWorkerFactory val entryPoint = EntryPointAccessors.fromApplication( this, HiltWorkerFactoryEntryPoint::class.java ) val workerFactory = entryPoint.hiltWorkerFactory() // 配置并初始化WorkManager val config = Configuration.Builder() .setWorkerFactory(workerFactory) .build() WorkManager.initialize(this, config) } }
额外注意事项
检查你的MyWorker中的enqueueWork方法,代码里写的是VpnOnRevokeWorker::class.delegatedData(),但实际要启动的是MyWorker,这里应该修正为:
.setInputData(MyWorker::class.delegatedData())
内容的提问来源于stack exchange,提问作者user924
相关产品推荐
相关产品推荐

