Как наблюдать живые данные в работе менеджера с цепочкой работ? - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть 3 задания A, B и C.Я хочу наблюдать данные в реальном времени для этой цепочки и иметь индикатор выполнения, который показывает текущую работу, и после завершения работы она должна отключить индикатор выполнения.

    // One Time work for A class
         OneTimeWorkRequest Awork = new OneTimeWorkRequest
                          .Builder(A.class)
                          .setConstraints(Miscellaneous.networkConstraint())
                          .addTag("A")
                          .build();
            //same for B and C
            //work chain 
           WorkContinuation syncChain = WorkManager.getInstance()
                              .beginWith(Awork)
                              .then(Bwork)
                              .then(Cwork);

         syncChain.enqueue();

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Вы можете использовать интерфейс «Operation», возвращаемый методом enqueue (), который имеет два метода getState () и getResult ()

fun enqueue(requests: List<WorkRequest>): Operation
fun cancelWorkById(id: UUID): Operation

interface Operation{
     fun getState(): LiveData<Operation.State>
     fun getResult(): ListenableFuture<Operation.State.SUCCESS>
}

Вы можете использовать функцию getState () для отслеживания прогресса и промежуточногоstates и функция getResult () будут возвращать только состояния терминала.то есть.успех или неудача.

0 голосов
/ 04 декабря 2018

Вы можете использовать метод mWorkManager.getWorkInfosByTagLiveData(TAG_OUTPUT); для восстановления статуса вашего WorkRequest, как показано в WorkManager codelab .

Это позволяет вам получить статус из WorkRequest как 'Перечисление WorkInfo.State 'со следующими возможными состояниями:

  • BLOCKED
  • CANCELED
  • ENQUEUED
  • FAILED
  • RUNNING
  • SUCCEEDED

Тем не менее, я не уверен, что это даст вам достаточно детализации для управления индикатором выполнения.

Получение информации, как я писал выше, дает вам гибкостьчтобы получить WorkInfo для каждого WorkRequest.
В качестве альтернативы вы можете получить список WorkInfo для WorkContinuation:

public abstract LiveData<List<WorkInfo>> getWorkInfosLiveData 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...