Sobre a localização em segundo plano e a duração da bateria

O uso da localização em segundo plano pode afetar significativamente a duração da bateria. O Android oferece suporte a limites para a coleta de localização em segundo plano, incentivando os desenvolvedores a otimizar os apps para melhorar a eficiência da bateria. Essas otimizações são benéficas para todos os dispositivos, independentemente da versão do Android em execução.

Com os Limites da localização em segundo plano:

  • A coleta de localização em segundo plano é limitada e a localização é calculada e entregue apenas algumas vezes por hora.
  • As verificações de Wi-Fi são mais conservadoras e as atualizações de localização não são computadas quando o dispositivo permanece conectado ao mesmo ponto de acesso estático.
  • A responsividade da fronteira geográfica virtual muda de dezenas de segundos para aproximadamente dois minutos. Essa mudança melhora o desempenho da bateria: até 10 vezes mais eficiência em alguns dispositivos.

Conhecimento necessário

Este documento pressupõe que você tenha familiaridade com as seguintes APIs:

Entender o consumo de bateria

A coleta de localização e o consumo de bateria estão relacionados da seguinte maneira:

  • Precisão:a exatidão dos dados de localização. Em geral, quanto melhor a precisão, maior será o consumo de bateria.
  • Frequência:a frequência com que a localização é calculada. Quanto maior a frequência do cálculo, mais a bateria será usada.
  • Latência:a velocidade de entrega dos dados de localização. Uma latência menor geralmente requer menos consumo de bateria.

Precisão

É possível especificar a precisão da localização usando o método setPriority(), transmitindo um dos valores a seguir como argumento:

  • PRIORITY_HIGH_ACCURACY fornece a localização mais precisa possível, que é calculada usando quantas entradas forem necessárias (ativa o GPS, o Wi-Fi e o celular e usa diversos sensores) e pode causar um consumo significativo de bateria.
  • PRIORITY_BALANCED_POWER_ACCURACY fornece localização precisa com otimização de energia. É muito raro o uso do GPS nesse caso. Normalmente, é usada uma combinação de informações de Wi-Fi e celular para calcular a localização do dispositivo.
  • PRIORITY_LOW_POWER depende fortemente das torres de celular e evita as entradas de GPS e Wi-Fi, fornecendo uma precisão aproximada (no nível da cidade) com o mínimo consumo possível de bateria.
  • PRIORITY_NO_POWER recebe as localizações passivamente de outros apps para os quais a localização já foi calculada.

Use as opções de energia equilibrada ou baixa para atender às necessidades de localização da maioria dos apps. Reserve a alta precisão para apps que são executados em primeiro plano e exigem atualizações de localização em tempo real (por exemplo, um app de mapa).

Frequência

Há dois métodos possíveis para especificar a frequência da localização:

  • Use o método setinterval() para especificar o intervalo de cálculo da localização do app.
  • Use o método setFastestInterval() para especificar o intervalo de recebimento de locais de outros apps.

Ao usar setInterval(), transmita o maior valor possível. Isso é especialmente verdade para a coleta de local em segundo plano, que costuma consumir a bateria. Reserve intervalos de alguns segundos para casos de uso em primeiro plano.

Os limites de localização em segundo plano introduzidos no Android 8.0 (nível 26 da API) impõem essas estratégias, mas seu app precisa se esforçar para aplicá-las em dispositivos com o Android 7.0 (nível 24 da API) e versões anteriores.

Latência

É possível especificar a latência usando o método setMaxWaitTime(), normalmente transmitindo um valor muitas vezes maior do que o intervalo especificado no método setInterval(). Essa configuração atrasa a entrega da localização e muitas atualizações de locais podem ser entregues em lotes. Essas duas mudanças ajudam a minimizar o consumo de bateria.

Caso o app não precise da atualização de localização imediatamente, transmita o maior valor possível ao método setMaxWaitTime(), efetivamente trocando a latência por mais dados e eficiência de bateria.

Ao usar fronteiras geográficas virtuais, os apps precisam transmitir um valor alto no método setNotificationResponsiveness() para economizar energia. É recomendado um valor de cinco minutos ou mais.

Leia mais

Para mais informações, consulte os seguintes documentos:

  • Recomendações: este guia apresenta algumas ações recomendadas concretas que podem ser usadas para melhorar o impacto do app na duração da bateria.
  • Casos de uso: este guia apresenta vários casos de uso comuns em que você pode usar os serviços de localização e como otimizar o impacto na duração da bateria nesses casos.