Questo documento descrive le best practice per ottimizzare il consumo energetico in un'app di navigazione mobile che crei utilizzando l'SDK Navigation. 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 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 intensivo della navigazione può causare lo scaricamento della batteria del dispositivo più rapidamente del previsto. Sebbene molti utenti possano risolvere questo problema caricando il dispositivo nel veicolo, i conducenti di veicoli a due ruote 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à ad alto consumo energetico 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 i compromessi appropriati 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, quando 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 ad alto consumo energetico: 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 ad alto consumo energetico, 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.
Per saperne di più sulla modifica delle frequenze fotogrammi, consulta la sezione Frequenza fotogrammi nella documentazione per gli sviluppatori del Centro per sviluppatori di contenuti multimediali Android.
Regolazione automatica della frequenza fotogrammi
A partire dalla versione 7.8.0, l'SDK Navigation regola automaticamente la frequenza fotogrammi della mappa durante la navigazione attiva per migliorare le prestazioni e ridurre il consumo della batteria. Quando il dispositivo entra in modalità di risparmio energetico, la frequenza fotogrammi della mappa scende a 10 FPS e viene reimpostata a 60 FPS al termine della navigazione o alla disattivazione della modalità di risparmio energetico.
Navigare senza una mappa
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 nell'SDK Navigation, ma senza visualizzare una mappa.
Per nascondere l'interfaccia utente di navigazione, non aggiungere un elemento NavigationView o SupportNavigationFragment oppure, se l'hai già fatto, rimuovi il codice che li aggiunge. Il seguente codice è stato modificato dall' app demo Android dell'SDK Navigation e mostra l'utilizzo dei commenti per rimuovere il codice che aggiunge l'interfaccia utente di navigazione:
//Obtain a reference to the NavigationFragment
//setContentView(R.layout.activity_nav_fragment);
//mNavFragment = (SupportNavigationFragment) getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);
L'SDK Navigation 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, naturalmente, 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 della disattivazione delle visualizzazioni della mappa durante la navigazione attiva.
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 il rendering della mappa sullo schermo.
L'SDK Navigation esegue il rendering delle mappe utilizzando il Google Maps SDK for Android, che contiene opzioni per applicare uno stile a qualsiasi visualizzazione 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à scura 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à scura 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.
Per creare uno stile scuro per la mappa, utilizza un oggetto MapStyleOptions con uno stile JSON che rappresenta la tua scelta di stile di mappa scuro. Gli stili JSON legacy possono essere creati utilizzando l'editor di stili legacy all'indirizzo https://mapstyle.withgoogle.com/.
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 nell' SDK Navigation , ma se la tua app per Android richiede la posizione in modo indipendente, ti consigliamo di consultare l'articolo Ottimizzare la posizione per la batteria nella documentazione per gli sviluppatori Android. 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 di prestazioni rispetto alla quale 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.