Вам нужно добавить уникальный тег к каждому WorkRequest. Проверьте Работа с тегами.
Вы можете логически сгруппировать свои задачи, назначив строку тега любому объекту WorkRequest. Для этого вам необходимо позвонить в WorkRequest.Builder.addTag()
.
Посмотрите ниже пример документа Android:
OneTimeWorkRequest cacheCleanupTask =
new OneTimeWorkRequest.Builder(MyCacheCleanupWorker.class)
.setConstraints(myConstraints)
.addTag("cleanup")
.build();
То же, что вы можете использовать для PeriodicWorkRequest
Затем вы получите список всех рабочих состояний для всех задач с этим тегом, используя WorkManager.getStatusesByTag()
.
Что дает вам LiveData
список _ 6_ для работы, помеченной тегом.
Затем вы можете проверить статус с помощью WorkStatus, как показано ниже:
WorkStatus workStatus = listOfWorkStatuses.get(0);
boolean finished = workStatus.getState().isFinished();
if (!finished) {
// Work InProgress
} else {
// Work Finished
}
Вы можете проверить ниже пример Google для более подробной информации. Здесь добавили, как добавить тег в WorkRequest и получить статус работы по тегу:
https://github.com/googlecodelabs/android-workmanager
Изменения. Проверьте код ниже и прокомментируйте, как мы можем получить WorkStatus по тегу. И запланируйте нашу работу, если результаты WorkStatus пусты.
// Check work status by TAG
WorkManager.getInstance().getStatusesByTag("[TAG_STRING]").observe(this, listOfWorkStatuses -> {
// Note that we will get single WorkStatus if any tag (here [TAG_STRING]) related Work exists
// If there are no matching work statuses
// then we make sure that periodic work request has been previously not scheduled
if (listOfWorkStatuses == null || listOfWorkStatuses.isEmpty()) {
// we can schedule our WorkRequest here
PeriodicWorkRequest dataupdate = new PeriodicWorkRequest.Builder( DataUpdateWorker.class , 15 , TimeUnit.MINUTES)
.addTag("[TAG_STRING]")
.build();
WorkManager.getInstance().enqueue(dataupdate);
return;
}
WorkStatus workStatus = listOfWorkStatuses.get(0);
boolean finished = workStatus.getState().isFinished();
if (!finished) {
// Work InProgress
} else {
// Work Finished
}
});
Я не тестировал код. Пожалуйста, поделитесь своим мнением о том же.
Надеюсь, это тебе поможет.
person
pRaNaY
schedule
19.07.2018