如何检查 PeriodicWorkRequest 是否入队?

How to check if PeriodicWorkRequest was enqueued?

我按以下方式对周期性任务进行排队:

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

但列表似乎一直为空。

您需要观察 LiveData 以获取值。如果没有观察者,则不会发出任何值,这是 LiveData.

的特性
LiveData<List<WorkStatus>> statusesLiveData = WorkManager.getInstance().getStatusesByTag(WORK_TAG);
statusesLiveData.observe(...)

您没有观察 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
    }
});

回答我自己的问题: 实际上有一种方法可以在不观察的情况下执行此操作(它应该从后台线程调用):

List<WorkStatus> statusesLiveData = WorkManager.getInstance().synchronous()
                                      .getStatusesByTagSync(WORK_TAG);