WorkManager OneTimeWorkRequest InitialDelay работает после двойного установленного времени

ОБНОВЛЕНИЕ (21-ноя-2019)

WorkManager.getInstance(activity).enqueueUniquePeriodicWork("test_work",
                                                ExistingPeriodicWorkPolicy.KEEP,
                                                PeriodicWorkRequest.Builder(MyWorker::class.java,
                                                        15, TimeUnit.MINUTES)
                                                        .build())

Теперь я использую PeriodicWork, и теперь doWork() вызывал дважды, даже если я отменил уникальную задачу с первой попытки. Я получаю уведомление дважды и Проверено в журнале, также дважды вызывается.

Note: It's happen only first time and sometime second time also but not getting third time twice.

override fun doWork(): Result {


            if (checkTaskFinished()) {
                Logger.e("checkXXX----Hurrayyyy  ☻♥☺")
                val notificationUtils: NotificationUtils = NotificationUtils(applicationContext)
                notificationUtils.showNotificationMessage("Readddd", "rwaeaeae.", 2)


                WorkManager.getInstance(context).cancelUniqueWork("test_work")
            }

    return Result.success()

}

Library I am using :implementation 'androidx.work:work-runtime-ktx:2.2.0'


СТАРЫЙ

У меня проблема с WorkManager OneTimeWorkRequest setInitialDelay.

Он отлично работает, когда приложение находится в открытом доступе или в недавнем списке. Но когда я удаляю приложение из недавнего списка, все идет наперекосяк.

Чего я хочу добиться? - Я хочу отправить уведомление пользователю через несколько часов, когда какая-то задача ожидает выполнения, поэтому после некоторых исследований и разработок начните работу с использованием WorkManager из-за его способности планировать задачи без ограничения фонового обслуживания.

Now below is code snippet which work till app is not removed from recent:

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


}

Problem is After Remove It from recent list It's send notification but after double time which I set. for example I set setInitialDelay 5 minutes but It's work after 10 minutes.

Итак, пожалуйста, объясните мне, что я делаю неправильно или это не для задачи расписания в определенное время, которое я установил на этот раз. Я не хочу повторять работу после того, как она будет сделана. Я создаю только новый после завершения первого OneTimeWorkRequest, поэтому он должен работать нормально в соответствии с документированным beginUniqueWork.

Library I am using :implementation "android.arch.work:work-runtime:1.0.0-alpha11"

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

вы нашли ответ на свой вопрос?

Andrey 04.09.2019 04:20

Это какой-то эксперимент в этом проекте, поэтому мы отказались от него, и я не пробовал после этого ...

bhavin 04.09.2019 05:19

@Andrea Привет, я только что снова начал эту работу и все еще сталкиваюсь с той же проблемой, что и сейчас использую implementation 'androidx.work:work-runtime-ktx:2.2.0'. Я обновил вопрос.

bhavin 21.11.2019 12:29

Мне нужно понизить версию до 2.1.0, чтобы она работала

Andrey 21.11.2019 16:48

Есть обновления по этому поводу? Не удается обновить WorkManager с 2.0.1 до 2.1.0, 2.2.0 или 2.3.4 из-за этой проблемы

Joaquin Iurchuk 18.06.2020 22:39

Извините, этот проект больше не работает, поэтому я не работаю над workmanager. Надеюсь, кто-нибудь даст вам обновление :)

bhavin 19.06.2020 06:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
6
2 374
1

Ответы 1

Проблема не ясна, но обновите последнюю версию библиотеки рабочего менеджера до android.arch.work:work-runtime:1.0.0-beta03.

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

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

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

Не работает даже в последней версии implementation 'androidx.work:work-runtime-ktx:2.2.0'

bhavin 21.11.2019 12:28

Другие вопросы по теме