WorkManager 2.3.4 - 新的 lint 规则

问题描述 投票:0回答:2

我将 WorkManager 的版本增加到 2.3.4,并且有一个名为

SpecifyJobSchedulerIdRange
的新 lint 规则,其描述为:“当应用程序使用
JobService
但没有为 WorkManager 指定 jobId 时发出警告。”和解释:

直接使用 JobScheduler API 时,WorkManager 要求开发人员指定 WorkManager 可以安全使用的一系列 JobScheduler id,以便

id
不会发生冲突。 有关更多信息,请参阅 androidx.work.Configuration.Builder.setJobSchedulerJobIdRange(int, int)。

我指定了 WorkManager 可以通过函数 setJobSchedulerJobIdRange 使用的 ids 范围,但我仍然收到该 lint 警告。奇怪的是,我的自定义 JobService 而不是 Configuration.Builder 收到了 lint 警告。

在我的应用程序课程中:

override fun getWorkManagerConfiguration(): Configuration {
    return Configuration.Builder()
       .setWorkerFactory(workerFactory)
       .setJobSchedulerJobIdRange(100000, 101000)
       .build()
}
android lint android-workmanager
2个回答
1
投票

我也遇到了这个问题,并花了一些时间在这里查看 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 的班级为每个人设置它?


0
投票

对于遇到此问题的任何人,im_not_josh 都有解决方案。 要按照他所说的操作,请将以下内容添加到派生自 JobService 的类中,以将 MAX 和 MIN_JOB_ID 替换为相关的最小和最大整数 ID(下面的代码是 Kotlin):

init
{
    val builder = Configuration.Builder()
    builder.setJobSchedulerJobIdRange(MIN_JOB_ID, MAX_JOB_ID)
}
© www.soinside.com 2019 - 2024. All rights reserved.