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

Como cancelar e interromper o trabalho

Se você não precisa mais de um trabalho que estava na fila, pode solicitar o cancelamento. A maneira mais simples de fazer isso é cancelar um único WorkRequest usando seu id e chamar WorkManager.cancelWorkById(UUID):

Kotlin

    WorkManager.cancelWorkById(workRequest.id)
    

Java

    WorkManager.cancelWorkById(workRequest.getId());
    

Em segundo plano, o WorkManager verifica o State do trabalho. Se o trabalho já estiver concluído, nada acontecerá. Caso contrário, o estado será alterado para CANCELLED, e o trabalho não será executado no futuro. Qualquer WorkRequests que seja dependente desse trabalho também será CANCELLED.

Além disso, se o trabalho for RUNNING, o worker também receberá uma chamada para ListenableWorker.onStopped(). Modifique esse método para processar uma possível limpeza. Discutiremos isso mais detalhadamente abaixo.

Também é possível cancelar WorkRequests por tag usando o método WorkManager.cancelAllWorkByTag(String). Esse método cancela todo o trabalho com essa tag. Além disso, é possível cancelar todo o trabalho com um nome exclusivo usando WorkManager.cancelUniqueWork(String).

Como interromper um worker em execução

Há vários motivos pelos quais seu worker em execução pode ser interrompido pelo WorkManager:

  • Você pediu explicitamente que ele fosse cancelado (chamando WorkManager.cancelWorkById(UUID), por exemplo).
  • No caso de trabalho exclusivo, você criou um novo WorkRequest com um ExistingWorkPolicy de REPLACE. O WorkRequest antigo é imediatamente encerrado.
  • As restrições do trabalho não são mais atendidas.
  • O sistema instruiu o app a interromper o trabalho por algum motivo. Isso pode acontecer se você exceder o prazo de execução de 10 minutos. O trabalho está programado para ser repetido mais tarde.

Nessas condições, o worker receberá uma chamada para ListenableWorker.onStopped(). É necessário fazer a limpeza e concluir o trabalho cooperativamente caso o sistema operacional decida encerrar o app. Por exemplo, é necessário fechar os identificadores abertos em bancos de dados e arquivos neste momento ou fazê-lo no menor tempo possível. Além disso, é possível consultar ListenableWorker.isStopped() sempre que você quiser verificar se já ele foi interrompido. Mesmo que você sinalize a conclusão do seu trabalho retornando um Result depois que onStopped() é chamado, o WorkManager o ignorará Result porque o worker já é considerado interrompido.

Veja exemplos de como lidar com onStopped() na seção Linhas de execução no WorkManager.