如何修复“为 WorkManager 指定有效范围的作业 ID”

问题描述

我已经扩展了 JobService

public class MyJobService extends JobService {

    @Override
    public boolean onStartJob(JobParameters params) {
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }
}

整个课程代码以黄色突出显示
警告说:

为 WorkManager 指定一个有效的作业 ID 范围。

我做错了什么,我该怎么办?

解决方法

警告表明,只要创建了 JobService 类的实现,用户就应该指定 WorkManager 有资格使用哪些 ID ",以免与工作代码冲突在您应用的其余部分中使用”(请参阅 setJobSchedulerJobIdRange(int,int) 中的文档)。

这应该在创建 androidx.work.Configuration 实例时完成:

Configuration.Builder builder = new Configuration.Builder();
builder.setJobSchedulerJobIdRange(0,1000);
...

不幸的是,我无法让这件事适用于我的设置,我不得不查看 lint (SpecifyJobSchedulerIdRangeIssueDetector) 的来源。从逻辑上我可以理解,只要有一个 方法调用 setJobSchedulerJobIdRange(请参阅第 92 行) - 然后检测器将假定用户已指定作业范围 ID,但这不起作用(至少在我的机器上)。>

不幸的是,检查检测器的 test class 也没有传达任何信息。

至于现在,我可以声明:

  • 创建扩展 JobService 的 kotlin 类不会导致 lint 警告
  • 创建扩展 JobService 的 java 类会导致 lint 警告,但即使在除 setJobSchedulerJobIdRange() 之外的其他类中执行 JobService 时,该问题也不会得到修复立>

有趣的是,在 setJobSchedulerJobIdRange() 类中调用 JobService 修复了警告:

enter image description here

显然,此检测器实现(或在我的机器上)存在一些问题。

尽管如此,如果您已指定 WorkManager 可免费使用的 ID 范围(即您已调用 setJobSchedulerJobIdRange()) - 那么您最好取消此警告。