Android Work Manager:“无法实例化Worker" [英] Android Work Manager: "Could not instantiate Worker"
问题描述
我已按照 Android开发人员的教程进行操作工人管理器结构在后台运行我的代码,但是每当我尝试使我的工人入队时,它都不会运行,并且会出现以下错误:
I've followed the Android Developer's tutorial on using the Worker Manager structure to run my code in background but anytime I try to enqueue my worker it doesn't run and I get the following error:
2018-10-04 22:25:47.004 28669-28885/app.package.com.debug E/DefaultWorkerFactory: Could not instantiate app.package.com.MyWorker
java.lang.NoSuchMethodException: <init> []
at java.lang.Class.getConstructor0(Class.java:2320)
at java.lang.Class.getDeclaredConstructor(Class.java:2166)
at androidx.work.DefaultWorkerFactory.createWorker(DefaultWorkerFactory.java:58)
at androidx.work.impl.WorkerWrapper.runWorker(WorkerWrapper.java:180)
at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:117)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
2018-10-04 22:25:47.005 28669-28885/app.package.com.debug E/WorkerWrapper: Could for create Worker app.package.com.MyWorker
我已经看到此问题可能与工作程序上的默认构造函数有关,但我已经使用了正确的函数而不是不推荐使用的默认函数.
I've seen that this problem could be related to the default constructor on the worker but I already use the correct one instead of the deprecated default function.
我的工人被宣布为:
public class MyWorker extends Worker {
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
// Doesn't even get called
}
}
它像这样排队:
WorkManager workManager = WorkManager.getInstance();
if (myWorkerRequest == null) {
myWorkerRequest = new OneTimeWorkRequest.Builder(MyWorker.class)
.setConstraints(new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build())
.build();
}
WorkStatus workStatus = workManager.getStatusById(myWorkerRequest.getId()).getValue();
if (workStatus == null || !workStatus.getState().isFinished()) {
workManager.enqueue(myWorkerRequest);
}
我没有看到与示例不同的内容,因此我想了解还有什么可能影响我的代码导致此崩溃.可能与ProGuard有关吗?
I'm not seeing anything different from the examples so I'd like to understand what else could affect my code to cause this crash. Could it be something ProGuard related?
我的版本是1.0.0-alpha09
谢谢!
推荐答案
这是已知问题使用已经标记为已固定为alpha10的WorkManager 1.0.0-alpha09.
This is a known issue with WorkManager 1.0.0-alpha09 that is already marked as fixed for alpha10.
作为一种解决方法,您可以将以下行添加到您的proguard配置中:
As a workaround, you can add the following lines to your proguard configuration:
-keepclassmembers class * extends androidx.work.Worker {
public <init>(android.content.Context,androidx.work.WorkerParameters);
}
这篇关于Android Work Manager:“无法实例化Worker"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!