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:
- Serviços de localização do Google. Essas APIs oferecem maior precisão e impõem um gasto de bateria menor do que as APIs de localização do framework.
- Provedor de localização combinada. Essa API combina sinais de GPS, Wi-Fi e redes de celular, além de acelerômetro, giroscópio, magnetômetro e outros sensores.
- Fronteira geográfica virtual: essa API é criada com base na API do provedor de localização misto e otimizada para o desempenho da bateria.
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.