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"
}