WorkManager OneTimeWorkRequest InitialDelay работает после истечения заданного времени - PullRequest
0 голосов
/ 14 ноября 2018

У меня проблема с 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"

Английский не мой родной язык, поэтому простите меня за грамматическую ошибку:)

1 Ответ

0 голосов
/ 11 февраля 2019

Ваша проблема не ясна, хотя, пожалуйста, обновите последнюю версию lib диспетчера работ до android.arch.work:work-runtime:1.0.0-beta03

И вы можете объяснить мне, почему вам нужно поставить уникальную работу в очередь?

workManager.beginUniqueWork("simple_work", ExistingWorkPolicy.KEEP, simpleRequest).enqueue();

попробоватьзаменить его на workManager.enque(simpleRequest); и дайте мне знать, если сработало

...