У меня проблема с WorkManager OneTimeWorkRequest setInitialDelay .
Это нормально работает, когда приложение находится в forground или в недавнем списке.Но когда я удаляю приложение из недавнего списка, все портится.
Чего я хочу достичь? - я хочу отправить уведомление пользователю через несколько часов, когда какая-то задача находится в состоянии ожидания, поэтому после некоторойR & D начинают работу, используя WorkManager из-за его способности планировать задачи без ограничения фонового обслуживания.
Ниже приведен фрагмент кода, который работает до тех пор, пока приложение не будет удалено из последних:
Constraints constraints = new Constraints.Builder()
.setRequiresBatteryNotLow(true)
.build();
final OneTimeWorkRequest simpleRequest = new OneTimeWorkRequest.Builder(MyWorker.class)
.setInitialDelay(3, TimeUnit.MINUTES)
.setConstraints(constraints)
.addTag("simple_work")
.build();
WorkManager workManager = WorkManager.getInstance();
workManager.beginUniqueWork("simple_work", ExistingWorkPolicy.KEEP, simpleRequest).enqueue();
Рабочий класс
public class MyWorker extends Worker {
private NotificationUtils notificationUtils;
public static final String EXTRA_OUTPUT_MESSAGE = "output_message";
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
notificationUtils = new NotificationUtils(getApplicationContext());
notificationUtils.showNotificationMessage("TITLE", "This is a MESSEAGE",2);
Data output = new Data.Builder()
.putString(EXTRA_OUTPUT_MESSAGE, "I have come from MyWorker!")
.build();
setOutputData(output);
return Result.SUCCESS;
}
}
Проблема в том, что после его удаления из недавнего списка отправляется уведомление, но после двойного времени, которое я установил.Например, я установил setInitialDelay 5 минут , но это работает через 10 минут.
Итак, пожалуйста, сообщите мне, что я делаю неправильно, или это не для задачи расписания в определенное время, которое я установилоднажды.Я не хочу продолжать повторную работу после того, как это будет сделано.Я создаю только что новый после окончания первого OneTimeWorkRequest, поэтому он должен нормально работать в соответствии с документально подтвержденным beginUniqueWork .
Библиотека, которую я использую: implementation "android.arch.work:work-runtime:1.0.0-alpha11"
Английский не мой родной язык, поэтому простите меня за грамматическую ошибку:)