3

对于 OneTimeWorkRequest,我们可以使用 WorkContinuation 来确保如果作业已经安排好了,我们可以保留或替换它。PeriodicWorkRequest 没有这样的选项,因此每次创建我的主要活动时都会创建一个新作业,一段时间后我会遇到此异常。

java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs

所以我正在尝试以下创建一个“独特的周期性工作”

public void schedule(){
    Constraints constraints = new Constraints.Builder().setRequiresBatteryNotLow(true).build();
    OneTimeWorkRequest zombieSpawnWorker = new OneTimeWorkRequest.Builder(ZombieSpawnWorker
            .class).setInitialDelay(15, TimeUnit.MINUTES).setConstraints(constraints).addTag(ZombieSpawnWorker.TAG).build();
    this.setUuid(zombieSpawnWorker.getId());
    WorkManager.getInstance().beginUniqueWork(TAG,
                    ExistingWorkPolicy.KEEP,
                    OneTimeWorkRequest.from(ZombieSpawnWorker.class));
}

然后在工作结束时再次调用这个方法

public WorkerResult doWork() {
    try {
        //work to be done
    } catch (Exception e) {
        Log.e(TAG,e.getLocalizedMessage());
        return WorkerResult.FAILURE;
    }
    schedule();
    return WorkerResult.SUCCESS;
}
4

2 回答 2

5

另一种解决方法是向 , 添加一个标签REQUEST_TAGPeriodicWorkRequestBuilder然后WorkManager.getInstance().cancelAllWorkByTag(REQUEST_TAG)在您将定期请求排入队列之前调用。

于 2018-05-23T23:51:33.673 回答
1

你看到的IllegalStateException是我们在alpha01. 使用alpha02图书馆,你不会看到这个问题。有关更多信息,请查看此处的发行说明。

于 2018-05-25T21:38:57.290 回答