Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Estados y observación de trabajos

Estados de trabajos

A medida que transcurre el ciclo de vida de tu trabajo, este pasa por varios State. En una sección posterior de este documento, se detalla cómo observar los cambios. Pero primero, debes conocerlos:

  • El trabajo se encuentra en el estado BLOCKED State si tiene trabajo de requisito previo que aún no finalizó.
  • El trabajo apto para ejecutarse en cuanto se cumplan sus Constraints y los plazos se considera ENQUEUED.
  • Cuando se ejecuta activamente un trabajador, se encuentra en estado RUNNING State.
  • Un trabajador que muestra Result.success() se considera SUCCEEDED. Esta es una terminal State; solo los OneTimeWorkRequest pueden ingresar este State.
  • Por el contrario, un trabajador que mostró Result.failure() se considera FAILED. Esta también es una terminal State; solo OneTimeWorkRequest puede ingresar este State. Todo el trabajo dependiente también se marcará como FAILED y no se ejecutará.
  • Cuando cancelas un WorkRequest de forma explícita que aún no finalizó, este ingresa el CANCELLED State. También se marcará todo el trabajo dependiente como CANCELLED y no se ejecutará.

Cómo observar tu trabajo

Después de colocar tu trabajo en cola, WorkManager te permite comprobar su estado. Esta información está disponible en un objeto WorkInfo, que incluye el id del trabajo, sus etiquetas, su State actual y los datos de salida.

Puedes obtener WorkInfo de tres maneras:

Las variantes de LiveData de cada uno de los métodos te permiten observar cambios de WorkInfo registrando un objeto de escucha. Por ejemplo, si quieres mostrar un mensaje al usuario cuando el trabajo finaliza correctamente, puedes configurarlo de la siguiente manera:

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!")
                  }
                }
            });