我将 WorkManager 的版本增加到 2.3.4,并且有一个名为
SpecifyJobSchedulerIdRange
的新 lint 规则,其描述为:“当应用程序使用 JobService
但没有为 WorkManager 指定 jobId 时发出警告。”和解释:
直接使用 JobScheduler API 时,WorkManager 要求开发人员指定 WorkManager 可以安全使用的一系列 JobScheduler id,以便
不会发生冲突。 有关更多信息,请参阅 androidx.work.Configuration.Builder.setJobSchedulerJobIdRange(int, int)。id
我指定了 WorkManager 可以通过函数 setJobSchedulerJobIdRange 使用的 ids 范围,但我仍然收到该 lint 警告。奇怪的是,我的自定义 JobService 而不是 Configuration.Builder 收到了 lint 警告。
在我的应用程序课程中:
override fun getWorkManagerConfiguration(): Configuration {
return Configuration.Builder()
.setWorkerFactory(workerFactory)
.setJobSchedulerJobIdRange(100000, 101000)
.build()
}
我也遇到了这个问题,并花了一些时间在这里查看 lint 问题的代码,https://android.googlesource.com/platform/frameworks/support/+/androidx-master-dev/work/workmanager -lint/src/main/java/androidx/work/lint/SpecifyJobSchedulerIdRangeIssueDetector.kt
如果我没记错的话,lint 检查会查找所有扩展 JobService 的类,然后确保其中至少有 1 个类调用 androidx.work.Configuration.Builder.setJobSchedulerJobIdRange
我更新了 JobService 的 1 扩展,以将配置作为静态方法提供给我的应用程序类,这解决了 lint 问题。
我不太确定它是否真的是一个 lint 问题 - 必须在 JobService 类中声明工作管理器的配置似乎很奇怪,特别是当它的 Application 类需要它时,但也许这就是他们的观点?确保使用作业 ID 的班级为每个人设置它?
对于遇到此问题的任何人,im_not_josh 都有解决方案。 要按照他所说的操作,请将以下内容添加到派生自 JobService 的类中,以将 MAX 和 MIN_JOB_ID 替换为相关的最小和最大整数 ID(下面的代码是 Kotlin):
init
{
val builder = Configuration.Builder()
builder.setJobSchedulerJobIdRange(MIN_JOB_ID, MAX_JOB_ID)
}