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"
Английский не мой родной язык, так что извините за грамматическую ошибку :)
Это какой-то эксперимент в этом проекте, поэтому мы отказались от него, и я не пробовал после этого ...
@Andrea Привет, я только что снова начал эту работу и все еще сталкиваюсь с той же проблемой, что и сейчас использую implementation 'androidx.work:work-runtime-ktx:2.2.0'. Я обновил вопрос.
Мне нужно понизить версию до 2.1.0, чтобы она работала
Есть обновления по этому поводу? Не удается обновить WorkManager с 2.0.1 до 2.1.0, 2.2.0 или 2.3.4 из-за этой проблемы
Извините, этот проект больше не работает, поэтому я не работаю над workmanager. Надеюсь, кто-нибудь даст вам обновление :)




Проблема не ясна, но обновите последнюю версию библиотеки рабочего менеджера до 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'
вы нашли ответ на свой вопрос?