Limites da localização em segundo plano

Em uma tentativa de reduzir o consumo de energia, o Android 8.0 (API de nível 26) limita a frequência com que os apps em segundo plano podem recuperar a localização atual do usuário. Os apps podem receber atualizações de local apenas algumas vezes por hora.

Observação: essas limitações se aplicam a todos os apps usados em dispositivos que executam o Android 8.0 (API de nível 26) ou versões posteriores, independentemente da versão do SDK de destino do app.

Esse comportamento de busca de localização é muito importante se seu app usa detecção de movimentos ou alertas em tempo real enquanto funciona em segundo plano.

O sistema distingue apps em primeiro plano dos em segundo plano. Considera-se que um app está em primeiro plano se alguma destas afirmações for verdadeira:

  • Há uma atividade visível, esteja ela em curso ou pausada.
  • Há um serviço em primeiro plano.
  • Outro app em primeiro plano está conectado ao app, seja vinculado a um dos serviços dele ou fazendo uso de um dos provedores de conteúdo. Por exemplo, se um app em primeiro plano for vinculado a qualquer um dos seguintes componentes em outro app, será considerado que esse outro app está em primeiro plano:

Se nenhuma dessas condições for verdadeira, será considerado que o app está em segundo plano.

Comportamento do app em primeiro plano preservado

Se um app estiver em primeiro plano em um dispositivo que executa o Android 8.0 (API de nível 26), o comportamento de atualização do local será o mesmo do Android 7.1.1 (API de nível 25) e versões anteriores.

Aviso: se o app buscar atualizações de localização quase em tempo real por muito tempo, a duração da bateria do dispositivo poderá ser significativamente diminuída.

Aprimorar o comportamento de localização do app

Analise se é possível que os casos de uso do seu app quando executado em segundo plano funcionem bem se o app receber atualizações de localização com menos frequência. Se esse for o caso, você pode buscar atualizações de localização mais frequentemente realizando uma das ações a seguir:

  • Colocar o app em primeiro plano.
  • Iniciar um serviço em primeiro plano no app, chamando startForegroundService(). Quando um serviço em primeiro plano está ativo, ele aparece como uma notificação contínua na área de notificação.
  • Usar elementos da API Geofencing, como GeofencingClient, que é otimizado para minimizar o uso de bateria.
  • Use um listener passivo de localização, que pode receber atualizações de local mais rapidamente se houver apps em primeiro plano solicitando a localização com maior frequência.

Observação: se o app precisar acessar o Histórico de localização que contém atualizações frequentes, use a versão em lote dos elementos da API Fused Location Provider, como a interface FusedLocationProviderApi. Quando seu app está sendo executado em segundo plano, essa API recebe o local do usuário com maior frequência do que a API sem lote. No entanto, lembre-se de que seu app ainda receberá atualizações em lote apenas algumas vezes por hora.

APIs afetadas

As mudanças no comportamento de busca de localização dos apps em segundo plano afetam as seguintes APIs:

Fused Location Provider (FLP)
  • Se o app estiver sendo executado em segundo plano, o serviço do sistema de localização computará um novo local para ele apenas algumas vezes por hora. Isso acontece mesmo quando o app está solicitando atualizações de local mais frequentes.

    No entanto, ao usar a versão em lote do FLP, você tem acesso a um Histórico de localização mais frequente após o app receber uma atualização em lote, o que também ocorre apenas algumas vezes por hora.

  • Não há nenhuma mudança nas taxas de amostragem de localização em relação ao Android 7.1.1 (API de nível 25) caso o app esteja em primeiro plano.
Fronteira geográfica virtual
  • Os apps em segundo plano podem receber eventos de transição de fronteira geográfica virtual com maior frequência do que as atualizações do Fused Location Provider.
  • A capacidade de resposta média de um evento de fronteira geográfica virtual é de por volta de dois minutos.
Medidas e mensagens de navegação do GNSS
Gerenciador de localização
  • As atualizações de localização são fornecidas aos apps em segundo plano apenas algumas vezes por hora.

    Observação: se o app estiver em execução em um dispositivo que tem o Google Play Services instalado, é altamente recomendável usar o Fused Location Provider (FLP).

Gerenciador de Wi-Fi
O método startScan() realiza uma varredura completa em busca de apps em segundo plano apenas algumas vezes por hora. Se um app em segundo plano chamar o método novamente pouco tempo depois, a classe WifiManager fornecerá resultados em cache da varredura anterior.