【问题标题】:Android Workmanager PeriodicWorkRequest is not uniqueAndroid Workmanager PeriodicWorkRequest 不是唯一的
【发布时间】:2018-05-20 13:04:08
【问题描述】:

对于 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;
}

【问题讨论】:

    标签: android-workmanager


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您看到的IllegalStateException 是我们在alpha01 中修复的错误。使用alpha02 库,你不会看到这个问题。有关详细信息,请查看发行说明 here

      【讨论】:

      • 谢谢。我们已经更新到 alpha02 并再次观察它。请问,对于一次性worker,在其执行结束时,是否需要显式取消tag,以避免出现此类问题?
      • 另外,我们正在使用WorkManager来进行告警提醒调度。有限制“应用程序不能安排超过 100 个不同的作业”,这是否意味着 WorkManager 不适合安排超过 100 个提醒?
      • @CheokYanCheng 你有没有找到任何解决 100 多个工作异常的方法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多