问题描述
我已经扩展了 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
修复了警告:
显然,此检测器实现(或在我的机器上)存在一些问题。
尽管如此,如果您已指定 WorkManager 可免费使用的 ID 范围(即您已调用 setJobSchedulerJobIdRange()
) - 那么您最好取消此警告。