You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hilt+WorkManager抛出NoSuchMethodException问题求助

Hilt与WorkManager集成时Worker实例化失败异常

异常日志

Could not instantiate my.example.package.widget.ExampleWorker
                 java.lang.NoSuchMethodException: my.example.package.widget.ExampleWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
                    at java.lang.Class.getConstructor0(Class.java:3325)
                    at java.lang.Class.getDeclaredConstructor(Class.java:3063)
                    at androidx.work.WorkerFactory.createWorkerWithDefaultFallback(WorkerFactory.java:95)
                    at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:243)
                    at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:145)
                    at androidx.work.impl.utils.SerialExecutorImpl$Task.run(SerialExecutorImpl.java:96)
                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
                    at java.lang.Thread.run(Thread.java:1012)
14:26:51.737  E  Could not create Worker my.example.package.widget.ExampleWorker

相关代码实现

ExampleWorker 代码

@HiltWorker
class ExampleWorker @AssistedInject constructor(
    @Assisted private val context: Context,
    @Assisted workerParameters: WorkerParameters,
    private val exampleUseCase: ExampleUseCase
) : CoroutineWorker(context, workerParameters) {

    companion object {

        private val uniqueWorkName = ExampleWorker::class.java.simpleName

        fun enqueue(context: Context) {
            val manager = WorkManager.getInstance(context)
            val requestBuilder = PeriodicWorkRequestBuilder<ExampleWorker>(
                Duration.ofMinutes(15)
            )

            manager.enqueueUniquePeriodicWork(
                uniqueWorkName,
                ExistingPeriodicWorkPolicy.UPDATE,
                requestBuilder.build()
            )
        }
    }

    override suspend fun doWork(): Result {
        exampleUseCase.invoke()
        return Result.success()
    }
}

Hilt 应用类代码

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

    @Inject
    lateinit var workerFactory: HiltWorkerFactory

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

AndroidManifest.xml 配置

<provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    tools:node="remove" />

依赖类 ExampleUseCase

class ExampleUseCase @Inject constructor() {
    operator fun invoke() {}
}

依赖配置

implementation("com.google.dagger:hilt-android:2.48.1")
ksp("com.google.dagger:hilt-android-compiler:2.48.1")

implementation("androidx.hilt:hilt-work:1.0.0")
ksp("androidx.hilt:hilt-compiler:1.0.0")

implementation("androidx.work:work-runtime-ktx:2.8.1")
implementation("androidx.work:work-runtime:2.8.1")

环境与升级背景

  • Gradle插件版本:8.1.1
  • Kotlin版本:1.9.10
  • 近期升级内容:Gradle插件从7.4.1到8.1.1、Kotlin从1.8.0到1.9.10、Hilt从2.44.2到2.48.1、编译SDK从33到34

已尝试的解决方式

  • 降级Hilt版本,出现新的兼容性异常;
  • 移除Worker构造中的exampleUseCase参数,异常消失但无法满足业务需求;
  • 尝试用lateinit var注入exampleUseCase,调用时未完成初始化,无法正常使用。

已查阅大量官方文档仍未解决问题,恳请帮忙排查。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:26:20