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

Android WorkManager自定义Worker注入参数报错:无法创建Worker

WorkManager结合自定义WorkerFactory创建带参数Worker时抛出NoSuchMethodException异常

运行时持续抛出以下异常:

Could not instantiate doddlecore.orders.workmanager.OrdersSyncWorker

java.lang.NoSuchMethodException: doddlecore.orders.workmanager.OrdersSyncWorker.<init> [class android.content.Context, class androidx.work.WorkerParameters]
                                                                                                        at java.lang.Class.getConstructor0(Class.java:2363)
                                                                                                        at java.lang.Class.getDeclaredConstructor(Class.java:2201)
                                                                                                        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:1137)
                                                                                                        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
                                                                                                        at java.lang.Thread.run(Thread.java:1012)

我的代码如下:

Android清单文件

<provider
            android:name="androidx.startup.InitializationProvider"
            android:authorities="${applicationId}.androidx-startup"
            android:exported="false"
            android:multiprocess="true"
            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>

Application类

@Override
    public androidx.work.Configuration getWorkManagerConfiguration() {
        DelegatingWorkerFactory factory = new DelegatingWorkerFactory();
        factory.addFactory(new MyWorkerFactory(orderRepository));
        return new androidx.work.Configuration.Builder()
                .setMinimumLoggingLevel(android.util.Log.INFO)
                .setWorkerFactory(factory)
                .build();
    }

Worker类

class OrdersSyncWorker(
    ctx: Context,
    params: WorkerParameters,
    private val ordersRepo: IOrderRepository
): CoroutineWorker(ctx, params) {

    override suspend fun doWork(): Result {
        return try {
            ordersRepo.syncOrders()
            Result.success()
        } catch (ex: IllegalStateException) {
            Result.retry()
        }
    }
}

WorkerFactory类

class MyWorkerFactory(private val orderRepository: IOrderRepository) : WorkerFactory() {

    override fun createWorker(
        appContext: Context,
        workerClassName: String,
        workerParameters: WorkerParameters
    ): ListenableWorker? {

        return when(workerClassName) {
            OrdersSyncWorker::class.java.name ->
                OrdersSyncWorker(appContext, workerParameters, orderRepository)
            else ->
                // Return null, so that the base class can delegate to the default WorkerFactory.
                null
        }

    }
}

我尝试过相关解决方案但均无效,不清楚问题出在哪。另外如果移除自定义参数,仅保留Context和WorkerParameters的构造函数,Worker就能正常运行:

class OrdersSyncWorker(
    ctx: Context,
    params: WorkerParameters
): CoroutineWorker(ctx, params) {

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:52:45