Я ставлю в очередь периодическое задание следующим образом:

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
kodlan 21 Авг 2018 в 10:36

3 ответа

Лучший ответ

Вы не наблюдаете LiveData, поскольку нет наблюдателя, поэтому никакие значения не передаются, то есть ноль. Обновите ваш код следующим образом:

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
    }
});
0
Qasim 21 Авг 2018 в 07:48

Отвечая на мой собственный вопрос: на самом деле есть способ сделать это без наблюдения (его следует вызывать из фонового потока):

List<WorkStatus> statusesLiveData = WorkManager.getInstance().synchronous()
                                      .getStatusesByTagSync(WORK_TAG);
0
Qasim 21 Авг 2018 в 12:48

Вам нужно соблюдать LiveData, чтобы получить значение. Никакое значение не будет выдано, если для него нет наблюдателя, что является особенностью LiveData.

LiveData<List<WorkStatus>> statusesLiveData = WorkManager.getInstance().getStatusesByTag(WORK_TAG);
statusesLiveData.observe(...)
1
jaychang0917 21 Авг 2018 в 07:42
51943788