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, solicitando que os desenvolvedores otimizem os aplicativos para melhorar a eficiência da bateria. Essas otimizações são benéficas para todos os dispositivos, independentemente da versão do Android que eles executam.
Com os limites de 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, que pode ficar até 10 vezes melhor em alguns dispositivos.
Conhecimento necessário
Este documento pressupõe que você conhece as seguintes APIs:
- Serviços de Localização do Google. Essas APIs oferecem maior precisão e impõem uma carga de bateria mais leve do que as APIs de localização do framework.
- Provedor de localização combinada. Essa API combina sinais de GPS, Wi-Fi e redes celulares, além de acelerômetro, giroscópio, magnetômetro e outros sensores.
- Geofencing: essa API é criada com base na API Fused Location Provider 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 forma:
- Precisão: a precisão dos dados de local. Em geral, quanto melhor a precisão, maior será o consumo de bateria.
- Frequência: com que frequência o local é calculado. Quanto maior a frequência do cálculo, mais a bateria será usada.
- Latência: a rapidez com que os dados de local são entregues. Menos latência geralmente exige mais bateria.
Precisão
É possível especificar a precisão de local usando o método setPriority(), transmitindo
um dos seguintes valores como argumento:
PRIORITY_HIGH_ACCURACYfornece o local mais preciso possível, que é calculado usando o máximo de entradas necessárias (ele ativa o GPS, o Wi-Fi e a rede celular e usa uma variedade de sensores) e pode causar um consumo significativo de bateria.- O
PRIORITY_BALANCED_POWER_ACCURACYfornece uma localização precisa e otimiza o consumo de energia. Quase nunca usa o GPS. Normalmente, usa uma combinação de informações de Wi-Fi e celular para calcular a localização do dispositivo. - O
PRIORITY_LOW_POWERdepende principalmente de torres de celular e evita entradas de GPS e Wi-Fi, fornecendo precisão aproximada (no nível da cidade) com consumo mínimo de bateria. - O
PRIORITY_PASSIVErecebe locais de forma passiva de outros apps para os quais o local já foi calculado.
Use as opções de energia equilibrada ou de baixa energia 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 do local em tempo real (por exemplo, um app de mapas).
Frequência
Há dois métodos possíveis para especificar a frequência da localização:
- Use o método
setIntervalMillis()para especificar o intervalo de computação da localização do app. - Use o método
setMinUpdateIntervalMillis()para especificar o intervalo de recebimento de locais de outros apps.
Transmita o maior valor possível ao usar setIntervalMillis(). Isso é
especialmente verdadeiro para a coleta de localização em segundo plano, que geralmente consome muita
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) aplicam essas estratégias, mas seu app precisa tentar 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 setMaxUpdateDelayMillis(),
geralmente transmitindo um valor que é várias vezes maior que o intervalo
especificado no método setIntervalMillis(). Essa configuração atrasa o envio de locais, e várias atualizações do local podem ser enviadas em lotes.
As duas mudanças citadas ajudam a minimizar o consumo de bateria.
Se o app não precisar de uma atualização do local imediatamente, transmita o
maior valor possível para o método setMaxUpdateDelayMillis(), trocando
latência por mais dados e eficiência da bateria.
Ao usar fronteiras geográficas virtuais, os apps precisam transmitir um valor grande para o método
setNotificationResponsiveness() para economizar energia. Recomendamos um valor de cinco minutos ou mais.
Leitura adicional
Para mais informações, consulte estes 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 para esses casos.