Opções de tarefas em segundo plano da transferência de dados

Muitos apps precisam transferir dados em segundo plano. Este guia descreve as opções de transferência de dados em segundo plano confiáveis e fornece exemplos de como implementá-las.

Cenários comuns de transferência de dados em segundo plano

Esta seção descreve algumas situações comuns em que os apps precisam transferir dados para ou do dispositivo e ajuda você a escolher a ferramenta certa para sua situação.

Ao selecionar entre APIs, considere as seguintes perguntas:

  • A transferência foi iniciada pelo usuário?
  • Existe uma API que processa essa transferência?
  • O trabalho precisa ser executado imediatamente?
Opção Quando usar Tempo Exemplos

WorkManager

Para programar tarefas com duração inferior a 10 minutos que precisam ser executadas quando o app não está visível.

Deferrível: também pode ser ajustado por restrições

Imediato: use setExpedited se o trabalho precisar ser executado imediatamente.

Sincronização periódica de dados com um servidor

Fazer o download ou enviar mídias pela rede iniciado em segundo plano (não pelo usuário)

Job de transferência de dados iniciado pelo usuário

Quando a transferência de dados é acionada pelo usuário e você precisa manter o usuário informado sobre o progresso da transferência.

Iniciado pelo usuário (por exemplo, clique no botão) - começa imediatamente

Fazer upload de uma foto, fazer o download de um arquivo

Serviço em primeiro plano

Para tarefas curtas e importantes ou quando o WorkManager não é uma opção. Uma notificação informa o usuário sobre o progresso da transferência.

Começa imediatamente

connectedDevice: sincronizar dados com um dispositivo conectado

shortService: processamento de arquivos em menos de 3 minutos

mediaProcessing: codificar ou decodificar um arquivo de mídia

API específica

Use se houver um para essa operação específica. Pode gerar benefícios, como desempenho otimizado e integração de sistema aprimorada.

Varia

Como sincronizar dados com um dispositivo conectado

Se o seu cenário não estiver listado em "Cenários comuns", consulte as seções a seguir para encontrar a API mais adequada para seu caso de uso. É provável que o WorkManager seja adequado.

Usar o tipo de job de transferência de dados iniciado pelo usuário

Se o app precisar transferir dados para um servidor remoto, use um job de transferência de dados iniciado pelo usuário. Esse tipo de trabalho é adequado se o seguinte for verdadeiro:

  • O usuário iniciou a transferência de dados
  • Você precisa notificar o usuário sobre o progresso da transferência de dados
  • A experiência do usuário é prejudicada se o sistema interromper a transferência

Se alguma dessas condições não for atendida, use o WorkManager.

Por exemplo, um app de mídia pode permitir que os usuários façam o download de álbuns para ouvir localmente. Se um usuário quiser fazer o download de uma playlist e reproduzi-la imediatamente, use o tipo de job de transferência de dados iniciado pelo usuário. Por outro lado, se o usuário quiser que a playlist salva seja atualizada periodicamente em segundo plano sem que ele tenha que fazer nada, o WorkManager seria uma escolha melhor.

Para mais informações, incluindo como criar e executar um job de transferência de dados iniciado pelo usuário, consulte a documentação sobre jobs de transferência de dados iniciados pelo usuário.

Usar o WorkManager para transferência de dados

Na maioria dos casos, o WorkManager é a melhor opção quando você precisa programar o trabalho. É necessário projetar as tarefas de modo que elas possam ser interrompidas ou adiadas pelo sistema. Para mais informações, consulte a documentação do WorkManager.

Confira alguns pontos a serem considerados ao usar o WorkManager para transferência de dados em segundo plano:

  • Se você precisar executar o trabalho o mais rápido possível, programe uma solicitação de trabalho acelerada. Essa opção é especialmente útil se você estiver programando o trabalho em resposta a uma transmissão, um alarme exato ou uma mensagem FCM de alta prioridade.
  • Se você precisar que o trabalho seja executado periodicamente, programe trabalhos periódicos. Uma solicitação de trabalho periódica permite especificar aproximadamente com que frequência o trabalho será executado, mas não garante um horário específico. Isso permite que o sistema programe solicitações de trabalho de diferentes apps para equilibrar as demandas no dispositivo.
  • É necessário definir restrições de trabalho para especificar as circunstâncias corretas para executar o job. Por exemplo, se o app precisar fazer o download de recursos não urgentes, especifique que o job precisa ser executado enquanto o dispositivo está sendo carregado e conectado a uma rede ilimitada. O WorkManager pode executar seu job em um momento que equilibra a carga no sistema.
  • O WorkManager pode cancelar e tentar novamente um job, se necessário. Por exemplo, o usuário pode desligar o dispositivo enquanto um job está em execução. O sistema pode tentar novamente o job quando o dispositivo estiver disponível novamente. Projete e teste seu fluxo de trabalho para garantir que o ciclo de cancelamento e nova tentativa funcione corretamente.
  • Workers de longa execução (serviço em primeiro plano):o WorkManager pode oferecer suporte a trabalhos que levam mais de 10 minutos criando um serviço em primeiro plano para o app. Isso significa que ele está sujeito às mesmas restrições que um serviço e jobs em primeiro plano, incluindo restrições de inicialização no segundo plano e limites de execução. Os jobs que levam mais de 10 minutos serão reprogramados pelo sistema.

O JobScheduler é uma opção alternativa para programar trabalhos em segundo plano. Ao contrário do WorkManager, ele exige mais configuração, mas como vantagem, você tem acesso a APIs que não estão disponíveis no WorkManager, como setPrefetch, setUserInitiated e getPendingJobReasons.

Usar uma API específica

Use uma API específica se ela estiver disponível (como o gerenciador de dispositivos complementares). Caso contrário, use um serviço connectedDevice em primeiro plano.

Identificar APIs específicas para casos de uso

Essa solicitação pede APIs específicas para tarefas de transferência de dados.


I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?

Usar comandos de IA

Os comandos de IA são destinados ao uso no Gemini no Android Studio (é necessária a versão mais recente do Canary)

Saiba mais sobre o Gemini no Studio aqui: https://developer.android.com/studio/preview/gemini

Usar um tipo de serviço em primeiro plano mais específico

Se o WorkManager e o JobScheduler não forem adequados para a tarefa em segundo plano específica, talvez seja necessário usar um serviço em primeiro plano.

Como sempre, ao considerar o uso de um serviço em primeiro plano, considere se há uma API alternativa melhor adaptada ao seu caso de uso.

Usar um serviço em primeiro plano curto

Se o app precisar executar uma tarefa curta e crítica, um serviço em primeiro plano shortService pode ser a melhor opção. Confira algumas situações em que um serviço em primeiro plano shortService pode ser apropriado:

  • O usuário inicia uma ação (como sincronizar dados com o servidor) e você quer garantir que a operação seja concluída mesmo que o usuário envie o app para o segundo plano imediatamente.
  • Salvar informações na memória para armazenamento permanente.
  • Criptografar ou descriptografar informações.

Para informações completas, consulte a documentação do shortService.

Usar um serviço em primeiro plano de dispositivo conectado

Se você precisar transferir dados para outro dispositivo local, use um serviço em primeiro plano connectedDevice. Confira algumas situações comuns em que você pode precisar fazer isso:

  • Comunicar-se com um acessório Bluetooth, como fones de ouvido ou um relógio inteligente
  • Transferir dados para um dispositivo conectado localmente por uma conexão USB, NFC ou uma conexão de Internet local

No entanto, nessas situações, talvez seja possível usar o gerenciador de dispositivos companheiros para se conectar ao dispositivo em vez de usar um serviço em primeiro plano. Como sempre, se uma API de finalidade especial estiver disponível para seu caso de uso, ela geralmente é uma escolha melhor do que usar um serviço em primeiro plano.

Usar o novo serviço em primeiro plano de processamento de mídia

Se você precisar processar dados de mídia, use o serviço de primeiro plano mediaProcessing. Esse tipo de serviço está disponível se o app for direcionado ao Android 15 ou mais recente. Por exemplo, esse tipo de serviço é adequado se o app precisar transcodificar mídia de um formato para outro para reprodução. Para mais informações, consulte a documentação do serviço em primeiro plano de processamento de mídia.

Outros recursos