Android 工作管理器 : "Could not instantiate Worker"

标签 android androidx android-workmanager

我关注了 Android Developer's有关使用 Worker Manager 结构在后台运行我的代码的教程,但任何时候我尝试将我的 worker 排入队列时它都不会运行,并且出现以下错误:

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

我发现这个问题可能与 worker 的默认构造函数有关,但我已经使用了正确的构造函数而不是已弃用的默认函数。

我的 worker 声明为:

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 相关的东西?

我的版本是1.0.0-alpha09

谢谢!

最佳答案

我遇到了同样的问题。对我来说问题的原因是我的 Worker 类是一个嵌套类。在我将其设为独立类(class)的那一刻,它就奏效了。

关于Android 工作管理器 : "Could not instantiate Worker",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52657196/

相关文章:

android - 具有给定 key 的 SavedStateProvider 已注册

用于在后台运行日常任务的 Android WorkManager api

armeabi-v7a : "PLT offset too large, try linking with --long-plt" 的 Android NDK 链接器失败

Android HTTPS 连接

android - 在 Android Studio 的 Flutter 应用中找不到已连接的设备

android - 将 LiveData<Resource<User>> 转换为 LiveData<User> 时的类型干扰问题

android - 在 androidx 中使用自定义字体

android - 由 ResourceNotFoundException 引起的类 NavigationView 膨胀错误

android - 定期工作请求未在工作管理器中执行 doWork

Android Workmanager PeriodicWorkRequest API 只能工作一次吗?