Android Workmanager PeriodicWorkRequest не является уникальным - PullRequest
0 голосов
/ 20 мая 2018

Для 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;
}

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вы видите IllegalStateException ошибку, которую мы исправили в alpha01.Используйте библиотеку alpha02, и вы не увидите этой проблемы.Для получения дополнительной информации посмотрите примечания к выпуску здесь .

0 голосов
/ 24 мая 2018

Другой обходной путь - добавить тег REQUEST_TAG к PeriodicWorkRequestBuilder, а затем вызвать WorkManager.getInstance().cancelAllWorkByTag(REQUEST_TAG), прежде чем ставить в очередь периодический запрос.

...