我已经扩展了
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,但这不起作用(至少在我的机器上)。
不幸的是,检查探测器的测试类也没有传达任何信息。
现在我可以声明:
JobService
不会 的 kotlin 类会导致 lint 警告JobService
的 java 类会导致 lint 警告,但即使在 setJobSchedulerJobIdRange()
之外的其他类中执行
JobService
有趣的是,在
setJobSchedulerJobIdRange()
类中调用 JobService
可以修复警告:
显然,这个检测器的实现(或在我的机器上)存在一些问题。
尽管如此,如果您指定了 WorkManager 可以自由使用的 ID 范围(即您已调用
setJobSchedulerJobIdRange()
),那么您最好抑制此警告。
对于 Kotlin,您可以在 init 内部添加 Configuration.Builder()。
class MyJobService : JobService() {
override fun onStartJob(jobParameters: JobParameters?): Boolean {
return true
}
override fun onStopJob(jobParameters: JobParameters?): Boolean {
return false
}
init {
// need minimum 1000 job ids
Configuration.Builder().setJobSchedulerJobIdRange(0, 1000).build()
}
}
class app : Application(), androidx.work.Configuration.Provider {
override val workManagerConfiguration: androidx.work.Configuration
get() = androidx.work.Configuration.Builder().setJobSchedulerJobIdRange(....).build()
安卓{ lintOptions { 禁用“SpecifyJobSchedulerIdRange” } https://googlesamples.github.io/android-custom-lint-rules/checks/SpecifyJobSchedulerIdRange.md.html