WorkManager 2.3.4 - 新的 lint 规则

klu*_*usi 7 android lint android-workmanager

我将 WorkManager 的版本增加到 2.3.4,并且有一个新的 lint 规则SpecifyJobSchedulerIdRange,描述为:“当应用程序使用JobService但没有为 WorkManager 指定 jobIds时发出警告。” 和解释:

直接使用 JobScheduler API 时,WorkManager 要求开发人员指定一系列 JobScheduler id,以便 WorkManager 可以安全使用,以免id发生冲突。有关更多信息,请查看 androidx.work.Configuration.Builder.setJobSchedulerJobIdRange(int, int)。

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

在我的应用程序类中:

override fun getWorkManagerConfiguration(): Configuration {
    return Configuration.Builder()
       .setWorkerFactory(workerFactory)
       .setJobSchedulerJobIdRange(100000, 101000)
       .build()
}
Run Code Online (Sandbox Code Playgroud)

im_*_*osh 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 的班级为每个人设置它?