您需要为每个 WorkRequest 添加一个唯一的标签。检查标记的工作。
您可以通过将标签字符串分配给任何 WorkRequest 对象来对您的任务进行逻辑分组。为此,您需要致电WorkRequest.Builder.addTag()
检查下面的 Android 文档示例:
OneTimeWorkRequest cacheCleanupTask =
new OneTimeWorkRequest.Builder(MyCacheCleanupWorker.class)
.setConstraints(myConstraints)
.addTag("cleanup")
.build();
同样你可以使用PeriodicWorkRequest
然后,您将使用该标签获得所有任务的所有 WorkStatus 列表WorkManager.getStatusesByTag()
。
它为您提供了带有标签的工作LiveData
列表。WorkStatus
然后您可以使用 WorkStatus 检查状态,如下所示:
WorkStatus workStatus = listOfWorkStatuses.get(0);
boolean finished = workStatus.getState().isFinished();
if (!finished) {
// Work InProgress
} else {
// Work Finished
}
您可以查看下面的谷歌示例以获取更多详细信息。在这里,他们添加了如何向 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
}
});
我没有测试过代码。请提供您的反馈。
希望这对您有所帮助。