Ottimizza il consumo di energia per la tua app

Questo documento descrive le best practice per ottimizzare il consumo energetico in un'app di navigazione mobile che crei utilizzando Navigation SDK. Allo stesso tempo, descrive i compromessi da considerare quando si utilizzano queste pratiche. In particolare, questo documento tratta i seguenti argomenti:

  • Fonti di consumo energetico elevato, classificate dalla più alta alla più bassa.
  • Strategie per ottimizzare il consumo energetico, in ordine di importanza, a partire dalla frequenza fotogrammi.
  • Strategie per gli utenti finali per insegnare agli utenti dell'app come gestire l'utilizzo del dispositivo durante la navigazione.

Perché ottimizzare l'app di navigazione?

A seconda della loro situazione, gli utenti dell'app potrebbero eseguire la guida alla navigazione per lunghi periodi di tempo. Ad esempio, i corrieri e i corrieri di consegna possono lavorare per lunghe ore, completando gli incarichi in un territorio sconosciuto. In questi casi, si affidano molto alla guida passo passo in-app. Ciò comporta alcuni problemi tipici:

  • Consumo eccessivo della batteria e disponibilità dei caricabatterie. L'utilizzo intenso della navigazione può causare lo scaricamento più rapido del previsto delle batterie dei dispositivi. Sebbene molti utenti possano risolvere questo problema caricando il dispositivo nel veicolo, i conducenti di motocicli non possono farlo.
  • Limitazione del dispositivo a causa del calore. Anche gli utenti che caricano continuamente il dispositivo possono riscontrare problemi. Un consumo energetico elevato per lunghi periodi di tempo può causare il surriscaldamento del dispositivo, con conseguente limitazione termica e perdita di prestazioni.

Le app di navigazione passo passo si basano su funzionalità che richiedono molta energia, come lo schermo, il GPS e la comunicazione radio con le torri cellulari, quindi è una best practice ottimizzare il consumo energetico della tua app mobile. Inoltre, devi considerare le esigenze di consumo energetico del tuo pubblico di destinazione in modo da poter trovare il giusto compromesso tra prestazioni e ottimizzazione del consumo energetico.

Che cosa consuma più energia?

Questa sezione suddivide le attività in-app associate a un consumo energetico elevato in due categorie:

  • Rendering schermo
  • Aggiornamenti posizione

Rendering schermo

Il rendering dello schermo di solito causa il consumo energetico più elevato nelle app di navigazione mobile. Ogni volta che il dispositivo disegna una mappa e altri elementi dell'interfaccia utente sullo schermo, si basa sull'elaborazione della GPU e della CPU. Allo stesso modo, se l'utente lascia lo schermo acceso per lunghi periodi di tempo, consuma anche più energia.

In una certa misura, puoi aspettarti un consumo energetico elevato da parte di conducenti o motociclisti che si affidano a una mappa visibile per navigare, soprattutto se utilizzano l'app ininterrottamente per molte ore. In questo scenario, l'app esegue anche una frequenza di rendering più elevata sullo schermo perché la mappa viene aggiornata in tempo reale. In alcuni casi, lo schermo può essere ridisegnato quasi continuamente, soprattutto quando l'utente guida da una località all'altra senza fermarsi.

Aggiornamenti posizione

Oltre al rendering dello schermo, altre due attività di navigazione consumano energia del dispositivo:

  • Utilizzo della torre cellulare radio e del GPS
  • Aggiornamenti e condivisione della posizione, ad esempio per fornire un ETA o per segnalare le posizioni di un veicolo in una flotta.

La comunicazione radio GPS e segnale radio cellulare si basa su operazioni di avvio che richiedono molta energia: il GPS deve trovare i satelliti e i segnali radio cellulari devono negoziare con le torri e stabilire una connessione. Per questi motivi, vengono eseguite ininterrottamente durante la navigazione, anche se le radio cellulari rimangono attive per 20-30 secondi nel tentativo di ridurre al minimo i costi di avvio. Il sistema operativo controlla queste impostazioni che non puoi configurare facilmente nella tua app.

Per gli aggiornamenti della posizione, il consumo energetico varia in base a fattori imprevedibili. Ad esempio, la distanza tra il dispositivo e la stazione base cellulare determina il consumo energetico, poiché il dispositivo utilizzerà il segnale minimo necessario per continuare la navigazione al fine di evitare di cambiare torre. Pertanto, un dispositivo che naviga in un'area con scarsa connettività consumerà più energia di uno vicino a una stazione base. Inoltre, alcune app potrebbero condividere gli aggiornamenti della posizione con un servizio centrale di gestione del parco risorse e, pertanto, dovranno comunicare con un server per farlo.

Ottimizzare il consumo energetico dell'app

La sfida per l'ottimizzazione del consumo energetico nelle app di navigazione è che queste app dipendono fortemente da risorse che richiedono molta energia, il che limita le opzioni per mitigare l'impatto senza dover scendere a compromessi, ad esempio limitando l'utilizzo dello schermo. Questa sezione fornisce un elenco di approcci che puoi adottare durante l'ottimizzazione dell'app, in ordine di impatto, dal più al meno efficace.

Modificare la frequenza fotogrammi

Lo schermo aggiorna ciò che mostra a una frequenza nota come frequenza fotogrammi. La frequenza fotogrammi viene misurata in genere in fotogrammi al secondo (FPS). Poiché il rendering dello schermo utilizza molta CPU o GPU, puoi ridurre la frequenza fotogrammi per risparmiare energia.

Il compromesso quando si riduce la frequenza fotogrammi è che il rendering dello schermo può apparire meno fluido, soprattutto se la mappa viene aggiornata di frequente. Questo potrebbe essere più evidente quando la mappa è ingrandita, quando l'utente viaggia ad alta velocità o quando cambia velocità o direzione di una quantità elevata.

Sui dispositivi iOS, Maps SDK for iOS espone la preferredFrameRate per controllare la frequenza fotogrammi. La tabella seguente mostra i valori dell'enumeratore GMSFrameRate che puoi modificare:

kGMSFrameRatePowerSave

Utilizza la frequenza fotogrammi minima per risparmiare l'utilizzo della batteria.

kGMSFrameRateConservative

Utilizza una frequenza fotogrammi media per fornire un rendering più fluido e risparmiare cicli di elaborazione.

kGMSFrameRateMaximum

Utilizza la frequenza fotogrammi massima per un dispositivo.

Per i dispositivi di fascia bassa è di 30 FPS, mentre per i dispositivi di fascia alta è di 60 FPS.

Per riferimento, consulta GMSFrameRate nella documentazione di Google Navigation SDK for iOS.

Sebbene tu non possa controllare la luminosità dello schermo del dispositivo dell'utente finale o per quanto tempo lo schermo rimane acceso, puoi fornire un'opzione per la guida alla navigazione senza una mappa. In questo modo, l'utente finale può scegliere questa opzione per risparmiare energia. Ad esempio, se i conducenti lavorano regolarmente nello stesso quartiere, potrebbero non aver bisogno della guida basata su mappa così spesso. La navigazione senza mappa può essere attivata impostando una destinazione e avviando la guida in Navigation SDK, ma senza visualizzare una mappa.

Aggiungi una riga di codice per nascondere GMSMapView:

mapView.isHidden = true

Navigation SDK continuerà ad aggiornare le posizioni agganciate alla strada, l'orario di arrivo stimato e la distanza rimanente del percorso e la tua app potrà comunque abbonarsi a tutti gli eventi generati dall'SDK man mano che il conducente procede. Questa soluzione non è adatta a tutti i casi d'uso e, ovviamente, non è un buon consiglio nei casi in cui il conducente deve vedere la mappa e seguire la guida visiva. Gli screenshot seguenti illustrano un confronto fianco a fianco dell'attivazione e disattivazione delle visualizzazioni della mappa durante la navigazione attiva.

App demo in esecuzione con la visualizzazione mappa visibile.
Figura 1.App demo di Navigation SDK per iOS che mostra la demo Data Back
App demo in esecuzione senza visualizzazione della mappa visibile.
Figura 2.App demo in esecuzione senza visualizzazione della mappa. Tieni presente che il tempo e la distanza rimanenti, nonché la posizione agganciata alla strada, continuano a essere aggiornati.

Utilizzare uno stile di mappa scuro

Valuta la possibilità di applicare uno stile alla mappa in modo da utilizzare un tema scuro per ridurre la quantità di energia necessaria per eseguire il rendering della mappa sullo schermo.

Navigation SDK esegue il rendering delle mappe utilizzando il Google Maps SDK for iOS, che contiene opzioni per applicare uno stile a tutte le visualizzazioni della mappa non di navigazione nella tua app. La visualizzazione di navigazione supporta anche l'applicazione forzata della modalità scura. Questo potrebbe non influire su tutti i dispositivi allo stesso modo a causa delle differenze nel tipo di schermo, ma in alcuni casi consente di risparmiare energia. Uno studio recente ha rilevato che la quantità di energia risparmiata dalla modalità Buio su alcuni schermi dipende dalla luminosità iniziale dello schermo. Ad esempio, la modalità scura consente di risparmiare più energia sugli schermi impostati sulla luminosità massima rispetto agli schermi la cui luminosità è già regolata al 30-50% del massimo. È importante tenerne conto quando si utilizza la modalità Buio per le app, perché il risparmio energetico sarà relativo alla luminosità dello schermo impostata dall'utente finale.

Per saperne di più sulla modifica dell'interfaccia utente di navigazione, consulta Modificare l'interfaccia utente di navigazione.

Screenshot dell'SDK Navigation in esecuzione su un iPhone 15 Pro con uno stile di mappa scuro.
Figura 3.Navigation SDK configurato con uno stile di mappa scuro
Configura GMSMapView con un mapID che rappresenta uno stile di mappa basato su cloud definito nel tuo progetto.

La personalizzazione delle mappe basata su cloud richiede un ID mappa che rappresenti una configurazione della mappa lato server creata nel progetto della console Google. Per saperne di più sulla creazione di un ID mappa, consulta la documentazione per gli sviluppatori relativa all'ID mappa. Per ulteriori dettagli sulla progettazione e sul deployment di uno stile di mappa basato su cloud, consulta la documentazione per gli sviluppatori sulla creazione e la gestione degli stili di mappa basati su cloud.

Modificare la frequenza di aggiornamento della posizione GPS

Quando valuti il consumo energetico degli aggiornamenti della posizione inviati dal dispositivo, concentrati maggiormente sulla frequenza degli aggiornamenti della posizione anziché sulla quantità di dati inviati nella trasmissione.

Non puoi controllare direttamente questa impostazione in Navigation SDK . Lo stesso consiglio vale per l'utilizzo di origini di posizione non GPS (cellulare e Wi-Fi).

Informare gli utenti

Gli utenti della tua app potrebbero voler sapere come ottimizzare il consumo energetico. Per aiutarli a ridurre il consumo energetico delle loro app, consiglia agli utenti di:

  • Bloccare lo smartphone
  • Mettere l'app di navigazione in background
  • Utilizzare la navigazione senza mappa, se possibile
  • Ridurre la luminosità dello schermo, utilizzando la modalità scura per gli schermi OLED e AMOLED o attivando la luminosità adattiva
  • Mantenere il dispositivo fresco
  • Connettersi al Wi-Fi in auto, se disponibile

Misurare il consumo energetico

Puoi utilizzare strumenti di livello professionale per misurare il consumo energetico, ma spesso è difficile o costoso ottenerli. Le app e gli strumenti di profilazione IDE come Power Profiler in Android Studio e il riquadro Utilizzo della batteria in XCode Organizer misurano il consumo energetico, ma può essere difficile rimuovere l'effetto dei processi in background o impostare una baseline delle prestazioni da misurare. In alcuni casi, le limitazioni del dispositivo potrebbero impedire l'accesso ai dati necessari.

Puoi utilizzare hardware di monitoraggio dell'alimentazione per scopi speciali e modificare la configurazione della connessione della batteria. Esistono prodotti e servizi commerciali che ti aiutano a farlo. Tieni presente che la modifica dei dispositivi in questo modo potrebbe invalidare la garanzia del dispositivo.