L'utilizzo della posizione in background può influire notevolmente sulla durata della batteria. Android supporta limiti alla raccolta della posizione in background, invitando gli sviluppatori a ottimizzare le loro applicazioni per una maggiore efficienza della batteria. Queste ottimizzazioni sono utili per tutti i dispositivi, indipendentemente dalla versione di Android in esecuzione.
Con i limiti di accesso alla posizione in background:
- La raccolta della posizione in background viene limitata e la posizione viene calcolata e comunicata solo poche volte all'ora.
- Le ricerche di reti Wi-Fi sono più conservative e gli aggiornamenti della posizione non vengono calcolati quando il dispositivo rimane connesso allo stesso punto di accesso statico.
- La reattività del geofencing passa da decine di secondi a circa due minuti. Questa modifica migliora le prestazioni della batteria, fino a 10 volte su alcuni dispositivi.
Conoscenze richieste
Questo documento presuppone la conoscenza delle seguenti API:
- Servizi di geolocalizzazione di Google. Queste API offrono una maggiore precisione e un minore impatto sulla batteria rispetto alle API di geolocalizzazione del framework.
- Fused Location Provider. Questa API combina i segnali di GPS, Wi-Fi e reti cellulari, nonché di accelerometro, giroscopio, magnetometro e altri sensori.
- Geofencing: questa API è basata sull'API Fused Location Provider ed è ottimizzata per le prestazioni della batteria.
Informazioni sul consumo della batteria
La raccolta della posizione e il consumo della batteria sono correlati come segue:
- Accuratezza: la precisione dei dati sulla posizione. In generale, maggiore è la precisione, maggiore è il consumo della batteria.
- Frequenza:la frequenza con cui viene calcolata la posizione. Più spesso viene calcolata la posizione, maggiore è il consumo di batteria.
- Latenza:la velocità di invio dei dati sulla posizione. Una latenza inferiore richiede solitamente più batteria.
Precisione
Puoi specificare l'accuratezza della posizione utilizzando il metodo setPriority()
, passando come argomento uno dei seguenti valori:
PRIORITY_HIGH_ACCURACY
fornisce la posizione più precisa possibile, calcolata utilizzando tutti gli input necessari (attiva il GPS, il Wi-Fi e la rete mobile e utilizza una serie di sensori) e potrebbe causare un notevole consumo della batteria.PRIORITY_BALANCED_POWER_ACCURACY
fornisce una posizione precisa e al contempo ottimizzata per il risparmio energetico. Utilizza molto raramente il GPS. In genere utilizza una combinazione di informazioni su Wi-Fi e rete mobile per calcolare la posizione del dispositivo.PRIORITY_LOW_POWER
si basa in gran parte sulle torri cellulari ed evita gli input GPS e Wi-Fi, fornendo una precisione approssimativa (a livello di città) con un consumo minimo della batteria.PRIORITY_NO_POWER
riceve le posizioni in modo passivo da altre app per le quali la posizione è già stata calcolata.
Utilizza le opzioni di risparmio energetico o basso consumo per soddisfare le esigenze di geolocalizzazione della maggior parte delle app. Riserva un'elevata precisione per le app in primo piano che richiedono aggiornamenti della posizione in tempo reale (ad esempio un'app di mappe).
Frequenza
Puoi specificare la frequenza della località utilizzando due metodi:
- Utilizza il metodo
setinterval()
per specificare l'intervallo per il calcolo della posizione della tua app. - Utilizza il metodo
setFastestInterval()
per specificare l'intervallo per la ricezione delle posizioni di altre app.
Passa il valore più grande possibile quando utilizzi setInterval()
. Questo è particolarmente vero per la raccolta della posizione in background, che spesso scarica la batteria. Riserva
intervalli di alcuni secondi per i casi d'uso in primo piano.
I limiti di accesso alla posizione in background introdotti in Android 8.0 (livello API 26) applicano queste strategie, ma la tua app dovrebbe cercare di applicarle anche sui dispositivi con Android 7.0 (livello API 24) e versioni precedenti.
Latenza
Puoi specificare la latenza utilizzando il metodo setMaxWaitTime()
, in genere passando un valore più grande di diverse volte rispetto all'intervallo specificato nel metodo setInterval()
. Questa impostazione ritarda l'invio della posizione e
più aggiornamenti della posizione potrebbero essere inviati in batch. Queste due modifiche contribuiscono a minimizzare il consumo della batteria.
Se la tua app non ha bisogno immediatamente di un aggiornamento della posizione, devi passare il valore più grande possibile al metodo setMaxWaitTime()
, scambiando efficacemente la latenza con più dati ed efficienza della batteria.
Quando utilizzi i recinti virtuali, le app devono passare un valore elevato al metodo setNotificationResponsiveness()
per risparmiare energia. È consigliabile un valore minimo di cinque minuti.
Continua a leggere
Per ulteriori informazioni, consulta i seguenti documenti:
- Consigli: questa guida illustra alcune azioni consigliate concrete che puoi utilizzare per migliorare l'impatto della tua app sulla durata della batteria.
- Casi d'uso: questa guida fornisce diversi casi d'uso comuni in cui potresti utilizzare i servizi di geolocalizzazione e spiega come ottimizzare l'impatto sulla durata della batteria in questi casi.