WorkManager, doWork () вызывается дважды с одним и тем же идентификатором непреднамеренно - PullRequest
0 голосов
/ 18 июня 2019

WorkManager выполняет doWork () дважды. Даже при использовании .enqueueUniquePeriodicWork () я получаю дубликаты с тем же идентификатором, который работает параллельно.

Мое пользовательское ограничение, позволяющее выполнять работу только при выключенном экране, но при выполнении условий оно удваивается.

Я пытался отменить и удалить всю ранее существовавшую работу, но doWork () по-прежнему вызывается дважды.

Нажата кнопка

->

           Log.i("[Worker]","Start");
            // Change every 15 minutes.

            PeriodicWorkRequest.Builder builder = new PeriodicWorkRequest.Builder(Worker.class, 15, TimeUnit.MINUTES);
            builder.setConstraints(Constraints.NONE);
            builder.setBackoffCriteria(BackoffPolicy.LINEAR,30,TimeUnit.SECONDS);
            builder.addTag("loader");

            PeriodicWorkRequest request = builder.build();
            // cancel all work
            WorkManager.getInstance().cancelAllWork();
            // clear all finished or cancelled tasks from the WorkManager
            WorkManager.getInstance().pruneWork();
            // Start PeriodicWork
            WorkManager.getInstance().enqueueUniquePeriodicWork(request.getId().toString(),REPLACE,request);

// Worker.java

public Worker.Result doWork() {
    // Print workId
    // Is screen on
    PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);

    boolean isScreenOn = pm.isInteractive();

    int r = getRunAttemptCount()+1;

    if (!isScreenOn) {
        Log.i("[Worker]", "workId: " + getId());
        // CODE
    } else if (isScreenOn) {
        Log.i("[Worker]","Fail: Retry "+r);
       return Result.retry();
    }
    return Result.success();
}

Log.i: Время: 16: 23: 00.634 [Рабочий]: Старт
Время: 16: 23: 00.963 [Рабочий]: Ошибка: Повторить 1
Время: 16: 23: 31.052 [Рабочий]: рабочий идентификатор: 90369ace-2e0b-4398-8cf1-6e5c3cd306c5
Время: 16: 23: 31.168 [Рабочий]: рабочий идентификатор: 90369ace-2e0b-4398-8cf1-6e5c3cd306c5

зависимости {
def work_version = "2.0.1"
реализация "androidx.work:work-runtime:$work_version"
}

1 Ответ

0 голосов
/ 19 июня 2019

Они не работают параллельно.Ваша работа запускается сразу после запуска приложения, потому что она повторяется.Тем временем вы пытаетесь отменить его и сразу же запустить новый.Вы можете видеть, что временные метки разные.

...