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