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 |
---|---|---|---|
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
|
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) |
|
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 |
|
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 |
|
|
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
.
Comando de IA
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 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
- Orientações sobre a transferência de dados iniciada pelo usuário
- Visão geral dos serviços em primeiro plano