我通过以下方式排队定期任务:
PeriodicWorkRequest request = new PeriodicWorkRequest.Builder(UpdateWorker.class, 1, TimeUnit.DAYS)
.addTag(WORK_TAG)
.build();
WorkManager.getInstance().enqueue(request);
如何检查此定期任务是否已排队? 我尝试过:
LiveData<List<WorkStatus>> statusesLiveData = WorkManager.getInstance().getStatusesByTag(WORK_TAG);
但是列表似乎一直都是空的。
答案 0 :(得分:1)
您需要遵守string()
才能获得该值。如果没有观察者,则不会发出任何值,这是LiveData
的功能。
LiveData
答案 1 :(得分:0)
由于没有观察者,因此您没有观察LiveData,因此不会发出任何值,因此为null。如下更新代码:
WorkManager.getInstance().getStatusesByTag("[TAG_STRING]").observe(this, listOfWorkStatuses -> {
WorkStatus workStatus = listOfWorkStatuses.get(0);
boolean finished = workStatus.getState().isFinished();
if (!finished) {
// Work InProgress
} else {
// Work Finished
}
});
答案 2 :(得分:0)
回答我自己的问题: 实际上有一种方法可以不观察(应该从后台线程调用):
List<WorkStatus> statusesLiveData = WorkManager.getInstance().synchronous()
.getStatusesByTagSync(WORK_TAG);