如何修复“指定 WorkManager 使用的作业 ID 的有效范围”

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

我已经扩展了

JobService

public class MyJobService extends JobService {

    @Override
    public boolean onStartJob(JobParameters params) {
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }
}

整个类代码以黄色突出显示。
警告说:

指定 WorkManager 使用的作业 ID 的有效范围。

我做错了什么,我应该做什么?

java android inheritance android-workmanager jobservice
3个回答
15
投票

警告表明,只要创建了

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()
),那么您最好抑制此警告。


5
投票

对于 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()
    }
}

0
投票
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

© www.soinside.com 2019 - 2024. All rights reserved.