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

Many apps need to transfer data in the background. This guide outlines choices for reliable background data transfer, and provides examples for how to implement them.

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 escolher 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 agendar tarefas com duração inferior a 10 minutos que devem ser executadas quando o app não estiver visível.

Adiavel: 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 upload de mídia enquanto estiver na rede Iniciado em segundo plano (não pelo usuário)

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

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

Iniciado pelo usuário (por exemplo, clique em um botão): começa imediatamente

Fazer upload de uma foto, baixar um arquivo

Serviço em primeiro plano

Para tarefas curtas e críticas 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. Isso pode gerar benefícios como desempenho otimizado e melhor integração do sistema.

Varia

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 ao 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 job é adequado se o seguinte for verdadeiro:

  • O usuário iniciou a transferência de dados
  • Você precisa manter o usuário informado sobre o progresso da transferência de dados
  • É prejudicial à experiência do usuário 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 baixem álbuns para ouvir offline. Se um usuário quiser baixar uma playlist e reproduzir 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 baixada seja atualizada periodicamente em segundo plano sem que ele precise iniciar o processo, o WorkManager será uma opção 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. As tarefas precisam ser projetadas de forma que 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, agende um pedido de trabalho expedido. 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ódico 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 agende 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 adequadas para executar o job. Por exemplo, se o app precisar baixar recursos não urgentes, você pode especificar que o job seja executado enquanto o dispositivo estiver carregando e conectado a uma rede ilimitada. O WorkManager pode executar o job em um momento que equilibre 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. Projete e teste seu fluxo de trabalho para garantir que o ciclo de cancelamento e nova tentativa funcione corretamente.
  • Workers de longa duraçã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 seu app. Isso significa que ele está sujeito às mesmas restrições de um serviço em primeiro plano e jobs, incluindo restrições de inicialização em segundo plano e limites de execução (jobs que levam mais de 10 minutos são reagendados 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 disponível (como o gerenciador de dispositivos complementares). Caso contrário, use um serviço em primeiro plano connectedDevice.

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.

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

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, pense se há uma API alternativa melhor para seu caso de uso.

Usar um serviço em primeiro plano de curta duração

Se o app precisar realizar 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 adequado:

  • 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 imediatamente o app para segundo plano.
  • Salvar informações na memória em armazenamento permanente.
  • Criptografar ou descriptografar informações.

Para mais informações, 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 do connectedDevice. Confira algumas situações comuns em que isso pode ser necessário:

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

No entanto, nessas situações, talvez seja possível usar o gerenciador de dispositivos complementares para se conectar ao dispositivo em vez de usar um serviço em primeiro plano. Como sempre, se uma API de uso específico estiver disponível para seu caso de uso, essa geralmente é uma opção 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 em primeiro plano mediaProcessing. Esse tipo de serviço está disponível se o app for destinado ao Android 15 ou versões mais recentes. 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 sobre o serviço em primeiro plano de processamento de mídia.

Outros recursos