You need to enable JavaScript to run this app. 使用Hilt注入CoroutineWorker时出现Worker无法实例化的异常咨询
优惠活动
大模型
产品
解决方案
定价
更多

使用Hilt注入CoroutineWorker时出现Worker无法实例化的异常咨询

Hilt注入WorkManager Worker实例化异常问题

问题背景

  • 最初使用WorkManager 2.7 alpha3版本,因该版本仅兼容Android 12预览SDK做版本降级后,Worker实例化报错仍未解决
  • 构造函数无业务依赖的Worker可正常运行,一旦通过构造函数注入业务类(如StorageHelper)就会触发实例化失败
  • 经日志确认,Worker创建流程完全没有走到自定义的HiltWorkerFactory,全部走了WorkManager默认的实例化逻辑

现有实现配置

Manifest配置

Manifest中未手动添加任何WorkManager相关配置节点

Application实现

@HiltAndroidApp
class TimelineApp : Application(), Configuration.Provider {

    @Inject
    lateinit var workerFactory: HiltWorkerFactory

    override fun getWorkManagerConfiguration() =
        Configuration.Builder()
            .setWorkerFactory(workerFactory)
            .build()
}

Worker类实现

@HiltWorker
class DriveSyncWorker @AssistedInject constructor(
    @Assisted val context: Context,
    @Assisted workerParams: WorkerParameters,
    val dependency: StorageHelper,
) : CoroutineWorker(context, workerParams)

Gradle依赖配置

implementation "com.google.dagger:hilt-android:$hilt_version"
kapt "com.google.dagger:hilt-compiler:$hilt_version"

def work_version = "2.6.0-alpha02"
implementation "androidx.work:work-runtime-ktx:$work_version"
implementation 'androidx.hilt:hilt-work:1.0.0-beta01'
implementation 'com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava'

报错日志

E/WM-WorkerFactory: Could not instantiate com.wakaztahir.timeline.utils.workers.DriveSyncWorker
    java.lang.NoSuchMethodException: com.wakaztahir.timeline.utils.workers.DriveSyncWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
        at java.lang.Class.getConstructor0(Class.java:2332)
        at java.lang.Class.getDeclaredConstructor(Class.java:2170)
        at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:95)
        at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:244)
        at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:136)
        at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:923)
E/WM-WorkerWrapper: Could not create Worker com.wakaztahir.timeline.utils.workers.DriveSyncWorker

问题解决方案

  • 核心原因:未禁用WorkManager默认自动初始化流程,系统通过内置的ContentProvider在应用启动早期就完成了WorkManager初始化,加载了默认的WorkerFactory,后续应用层实现的Configuration.Provider配置完全不会生效
  • 第一步:在AndroidManifest.xml中移除WorkManager默认的自动初始化节点,配置如下:
    <provider
        android:name="androidx.work.impl.WorkManagerInitializer"
        android:authorities="${applicationId}.workmanager-init"
        tools:node="remove" />
    
  • 第二步:替换存在兼容问题的依赖版本组合
    当前使用的work:2.6.0-alpha02 + hilt-work:1.0.0-beta01存在接口不匹配问题,建议替换为稳定兼容组合:
    • WorkManager升级到2.7.1及以上稳定版(完全兼容Android 12正式SDK,不再依赖预览SDK)
    • androidx.hilt:hilt-work升级到1.0.0稳定版
  • 第三步:校验Hilt注入链路
    确认Application类已正确在Manifest中注册,@HiltAndroidApp注解生效,避免HiltWorkerFactory注入为空导致的配置失效
  • 第四步:多进程场景校验
    若应用存在多进程运行WorkManager的场景,需确保Configuration.Provider逻辑在所有进程下均可正常执行,避免非主进程触发默认初始化逻辑

相关参考方向

  • Dagger组件中关于协程Worker注入的已知兼容问题
  • 社区同类Hilt注入Worker失败的通用排查方案

内容的提问来源于stack exchange,提问作者Waqas Tahir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 19:57:00