O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Estados de trabalho e como observar trabalhos

Estados de trabalho

Ao longo do ciclo de vida, seu trabalho passa por vários State. Mais adiante neste documento, falaremos sobre como observar as mudanças. Mas antes, é preciso aprender sobre cada estado:

  • Um trabalho no State BLOCKED tem um pré-requisito que ainda não foi concluído.
  • Um trabalho qualificado para ser executado assim que as próprias Constraints e os requisitos de tempo são atendidos é considerado ENQUEUED.
  • Quando um worker está sendo executado de forma ativa, ele está no State RUNNING.
  • Um worker que retornou Result.success() é considerado SUCCEEDED. Esse é um State terminal. Somente OneTimeWorkRequests podem entrar nesse State.
  • Por outro lado, um worker que retornou Result.failure() é considerado FAILED. Esse também é um State terminal. Somente OneTimeWorkRequests podem entrar nesse State. Todos os trabalhos dependentes também serão marcados como FAILED e não serão executados.
  • Quando você cancela explicitamente uma WorkRequest que ainda não foi concluída, ela entra no State CANCELLED. Todos os trabalhos dependentes também serão marcados como CANCELLED e não serão executados.

Como observar seu trabalho

Depois de colocar seu trabalho em fila, o WorkManager permite que você verifique o status dele. Essa informação fica disponível em um objeto WorkInfo, que inclui o id do trabalho, as tags, o State atual e outros dados de saída.

Você pode ver WorkInfo de uma das três formas a seguir:

As variantes de LiveData de cada método permitem observar as mudanças das WorkInfo por meio do registro de um listener. Por exemplo, se você quisesse exibir uma mensagem para o usuário quando algum trabalho fosse concluído, poderia configurá-la assim:

Kotlin

    WorkManager.getInstance(myContext).getWorkInfoByIdLiveData(uploadWorkRequest.id)
            .observe(lifecycleOwner, Observer { workInfo ->
                if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
                    displayMessage("Work finished!")
                }
            })
    

Java

    WorkManager.getInstance(myContext).getWorkInfoByIdLiveData(uploadWorkRequest.getId())
            .observe(lifecycleOwner, new Observer<WorkInfo>() {
                @Override
                public void onChanged(@Nullable WorkInfo workInfo) {
                  if (workInfo != null && workInfo.state == WorkInfo.State.SUCCEEDED) {
                      displayMessage("Work finished!")
                  }
                }
            });