Limiti della posizione in background

Nel tentativo di ridurre il consumo energetico, Android 8.0 (livello API 26) limita la frequenza con cui un'app può recuperare la posizione attuale dell'utente mentre è in esecuzione in background. In queste condizioni, le app possono ricevere aggiornamenti sulla posizione solo poche volte ogni ora.

Nota: queste limitazioni si applicano a tutte le app utilizzate su dispositivi con Android 8.0 (livello API 26) o versioni successive, indipendentemente dalla versione dell'SDK target dell'app.

Questo comportamento di recupero della posizione è particolarmente importante da tenere presente se la tua app si basa su avvisi in tempo reale o rilevamento di movimenti durante l'esecuzione in background.

Il comportamento dell'app in primo piano viene mantenuto

Se un'app è in primo piano su un dispositivo con Android 8.0 (livello API 26), il comportamento di aggiornamento della posizione è lo stesso di Android 7.1.1 (livello API 25) e versioni precedenti.

Avviso: se l'app recupera aggiornamenti sulla posizione quasi in tempo reale per un lungo periodo di tempo, la durata della batteria del dispositivo si riduce notevolmente.

Ottimizzazione del comportamento relativo alla posizione dell'app

Valuta se i casi d'uso della tua app per l'esecuzione in background non possono avere successo se l'app riceve aggiornamenti della posizione non frequenti. In questo caso, puoi recuperare gli aggiornamenti della posizione più spesso eseguendo una delle seguenti azioni:

  • Porta la tua app in primo piano.
  • Avvia un servizio in primo piano nella tua app chiamando startForegroundService(). Quando un servizio in primo piano è attivo, viene visualizzato come notifica continua nell'area di notifica.

    Attenzione:se la tua app avvia un servizio in primo piano mentre è in esecuzione in background su un dispositivo con Android 11 (livello API 30) o versioni successive, l'app non può accedere alle informazioni sulla posizione a meno che l'utente non abbia concesso l'autorizzazione ACCESS_BACKGROUND_LOCATION per l'app. Per ulteriori informazioni, consulta le indicazioni sulle limitazioni durante l'uso associate ai servizi in primo piano.

  • Utilizza elementi dell'API Geofencing, come GeofencingClient, ottimizzati per ridurre al minimo il consumo energetico.
  • Utilizza un listener della posizione passivo, che potrebbe ricevere aggiornamenti della posizione più rapidi se ci sono app in primo piano che richiedono aggiornamenti della posizione più rapidamente.

Nota: se la tua app ha bisogno di accedere a una cronologia delle posizioni che contiene aggiornamenti con frequenza temporale, utilizza la versione batch degli elementi dell'API Fused Location Provider, ad esempio l'interfaccia FusedLocationProviderApi. Quando la tua app è in esecuzione in background, questa API riceve la posizione dell'utente più spesso rispetto all'API non in batch. Tuttavia, tieni presente che la tua app riceve comunque gli aggiornamenti in batch solo poche volte all'ora.

API interessate

Le modifiche al comportamento di recupero della posizione nelle app in background influiscono sulle seguenti API:

Fused Location Provider (FLP)
  • Se la tua app viene eseguita in background, il servizio del sistema di geolocalizzazione calcola una nuova posizione per l'app solo poche volte all'ora. Questo si verifica anche quando la tua app richiede aggiornamenti della posizione più frequenti.

    Tuttavia, se utilizzi la versione in batch di FLP, hai accesso a una maggiore cronologia delle posizioni con frequenza temporale dopo che l'app riceve un aggiornamento batch, che avviene anche poche volte all'ora.

  • Se la tua app viene eseguita in primo piano, non sono previste variazioni nelle frequenze di campionamento della località rispetto ad Android 7.1.1 (livello API 25).
Geofencing
  • Le app in background possono ricevere eventi di transizione di geofencing più spesso rispetto agli aggiornamenti da Fused Location Provider.
  • La reattività media di un evento di geofencing è ogni due minuti circa.
Misurazioni GNSS e messaggi di navigazione GNSS
Gestore località
  • Gli aggiornamenti della posizione vengono forniti alle app in background solo poche volte all'ora.

    Nota: se la tua app è in esecuzione su un dispositivo su cui è installato Google Play Services, ti consigliamo vivamente di utilizzare Fused Location Provider (FLP).

Gestione Wi-Fi
Il metodo startScan() esegue una scansione completa delle app in background solo poche volte all'ora. Se un'app in background chiama di nuovo il metodo subito dopo, la classe WifiManager fornisce risultati memorizzati nella cache della scansione precedente.