Guia para o processamento em segundo plano

O processamento de dados em segundo plano é uma parte importante da criação de um aplicativo para Android que seja responsivo para os usuários e uma boa adição à Plataforma Android. Este guia define categorias de tarefas em segundo plano, fornece critérios para classificar suas tarefas e recomenda as APIs que você precisa usar para executá-las.

Princípios orientadores

Em geral, toda tarefa que leve mais de alguns milissegundos precisa ser delegada a uma linha de execução em segundo plano. Tarefas comuns de longa duração incluem, por exemplo, decodificar um bitmap, acessar armazenamento, trabalhar em um modelo de aprendizado de máquina (ML) ou realizar solicitações de rede.

Categorias de tarefas em segundo plano

As tarefas em segundo plano se enquadram em uma das seguintes categorias principais:

  • Imediata
  • Adiada
  • Exata

Para classificar uma tarefa, responda às perguntas a seguir e passe pela árvore de decisão correspondente na Figura 1:

A tarefa precisa ser concluída enquanto o usuário está interagindo com o aplicativo?
Em caso afirmativo, essa tarefa deve ser classificada para execução imediata. Caso contrário, prossiga para a segunda pergunta.
A tarefa precisa ser executada em um horário exato?
Se você precisar executar uma tarefa em um horário exato, classifique-a como exata.

A maioria das tarefas não precisa ser executada em um horário exato. As tarefas geralmente permitem pequenas variações quando são executadas com base em condições como disponibilidade de rede e bateria restante. As tarefas que não precisam ser executadas em um horário exato devem ser classificadas como adiadas.

Essa árvore de decisão ajuda você a decidir qual categoria é melhor para
           sua tarefa em segundo plano.
Figura 1. Essa árvore de decisão ajuda você a decidir qual categoria é melhor para sua tarefa em segundo plano.

As seções a seguir descrevem as soluções recomendadas para cada tipo de tarefa em segundo plano.

Recomendamos corrotinas de Kotlin para tarefas que precisam terminar quando o usuário sai de um determinado escopo ou conclui uma interação. Muitas bibliotecas do Android KTX contêm escopos de corrotina prontos para componentes comuns do app, como ViewModel e ciclos de vida comuns do app.

Para usuários de linguagem de programação Java, consulte Linhas de execução no Android para conhecer as opções recomendadas.

Para tarefas que precisam ser executadas imediatamente e precisam de processamento contínuo, mesmo que o usuário coloque o aplicativo em segundo plano ou o dispositivo seja reiniciado, recomendamos o uso de WorkManager e compatibilidade com tarefas de longa duração.

Em casos específicos, como com a reprodução de mídia ou a navegação ativa, é recomendável usar diretamente os serviços em primeiro plano.

Tarefas adiadas

Cada tarefa que não está diretamente conectada a uma interação do usuário e pode ser executada a qualquer momento no futuro pode ser adiada. A solução recomendada para tarefas adiadas é WorkManager.

O WorkManager facilita a programação de tarefas adiadas e assíncronas que devem ser executadas mesmo que o app seja fechado ou o dispositivo seja reiniciado. Consulte a documentação de WorkManager para aprender a programar esses tipos de tarefas.

Tarefas exatas

Uma tarefa que precisa ser executada em um momento exato pode usar AlarmManager.

Para saber mais sobre AlarmManager, consulte Programar alarmes recorrentes.