Questo documento descrive le best practice su come ottimizzare il consumo energetico in un'app di navigazione mobile creata utilizzando l'SDK di navigazione. Allo stesso tempo, descrive i compromessi da considerare quando si utilizzano queste pratiche. In particolare, questo documento riguarda quanto segue:
- Origini con consumo elevato, classificate dal più alto al più basso.
- Strategie per ottimizzare il consumo energetico, in ordine di importanza, iniziando con la frequenza fotogrammi.
- Strategie per gli utenti finali per insegnare agli utenti della tua app a gestire l'utilizzo del dispositivo durante la navigazione.
Perché ottimizzare l'app di navigazione?
A seconda della situazione, gli utenti della tua app potrebbero eseguire indicazioni stradali per periodi di tempo prolungati. Ad esempio, i conducenti e i corrieri possono lavorare per lunghe ore, completando incarichi in territori sconosciuti. In questi casi, si basano molto sulle indicazioni stradali passo passo in-app. Questo determina alcuni problemi tipici:
- Dispendio della batteria e disponibilità dei caricabatterie. L'uso intensivo della navigazione può causare il consumo delle batterie del dispositivo più velocemente del previsto. Sebbene molti utenti possano risolvere il problema caricando il dispositivo nel veicolo, i conducenti di veicoli a due ruote non possono farlo.
- Limitazione del dispositivo dovuta al calore. Anche gli utenti che caricano continuamente il dispositivo possono riscontrare problemi. Un consumo elevato di energia per lunghi periodi di tempo può causare il surriscaldamento del dispositivo, con conseguente limitazione termica e conseguente perdita di prestazioni.
Le app di navigazione passo passo si basano su funzionalità che consumano molta energia come schermo, GPS e comunicazione radio con 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 stabilire i compromessi appropriati tra prestazioni e ottimizzazione del consumo energetico.
Cosa consuma più energia?
Questa sezione suddivide le attività in-app associate a un consumo elevato di energia in due categorie:
- Rendering dello schermo
- Aggiornamenti posizione
Rendering dello 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 UI sullo schermo, si basa sull'elaborazione di GPU e CPU. Analogamente, se l'utente lascia attiva la schermata per lunghi periodi di tempo, viene consumata più energia.
In una certa misura, puoi aspettarti un elevato consumo di energia da parte di conducenti o passeggeri che si affidano a una mappa visibile per orientarsi, soprattutto se utilizzano l'app continuamente per molte ore. In questo scenario, l'app esegue anche una percentuale di rendering più alta sullo schermo, perché la mappa viene poi aggiornata in tempo reale. In alcuni casi, la schermata può essere ridisegnata quasi continuamente, in particolare 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 di torri di telefonia mobile e GPS
- Aggiornamenti e condivisione della posizione, ad esempio per fornire un orario di arrivo stimato o segnalare le posizioni di un veicolo in un parco.
Sia il GPS che le comunicazioni radio cellulari si basano su operazioni di avvio che richiedono molta energia: il GPS deve trovare i satelliti e le radio cellulari devono negoziare con le torri e stabilire una connessione. Per questi motivi, vengono eseguite essenzialmente in modo continuo 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 di energia varia in base a fattori imprevedibili. Ad esempio, la distanza tra il dispositivo e la stazione di base cellulare determina il consumo di energia, 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 un dispositivo che si trova vicino a una stazione di base. Inoltre, alcune app potrebbero condividere aggiornamenti sulla posizione con un servizio di gestione della flotta centrale e, di conseguenza, dovranno comunicare con un server per farlo.
Ottimizza il consumo di energia dell'app
La sfida dell'ottimizzazione dell'utilizzo di energia nelle app di navigazione è che queste app dipendono molto da risorse che consumano molta energia, il che limita le opzioni per mitigare l'impatto senza scendere a compromessi come la limitazione dell'uso dello schermo. Questa sezione fornisce un elenco di approcci che puoi adottare per ottimizzare la tua app, in ordine dall'impatto maggiore a quello minore.
Modificare la frequenza frame
Lo schermo aggiorna ciò che mostra a una frequenza nota come frequenza fotogrammi. In genere, la frequenza fotogrammi viene misurata in f/s (frame al secondo). Poiché il rendering dello schermo utilizza molta CPU o GPU, puoi ridurre la frequenza dei fotogrammi per risparmiare energia.
Lo svantaggio 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 viene aumentato lo zoom della mappa per mostrare dettagli elevati, quando l'utente viaggia ad alta velocità o quando cambia notevolmente velocità o direzione.
Consulta la sezione Frequenza fotogrammi nella documentazione per gli sviluppatori di Android Media Dev Center per scoprire di più sulla modifica delle frequenze fotogrammi.
Naviga senza mappa
Anche se non puoi stabilire il modo in cui l'utente finale imposta la luminosità dello schermo del dispositivo o per quanto tempo lo schermo rimane acceso, puoi fornire un'opzione di guida alla navigazione senza una mappa. In questo modo l'utente finale potrebbe scegliere questa opzione per risparmiare energia. Ad esempio, se i conducenti lavorano regolarmente nello stesso quartiere, potrebbero non aver bisogno di indicazioni basate su mappe così di frequente. La navigazione senza mappa può essere attivata impostando una destinazione e avviando le indicazioni stradali nell'SDK Navigation, ma senza visualizzare una mappa.
Per nascondere l'interfaccia utente di navigazione, non aggiungere un NavigationView o un SupportNavigationFragment oppure, se lo hai già fatto, rimuovi il codice che li aggiunge. Il seguente codice è 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 di navigazione continuerà ad aggiornare le posizioni delle strade agganciate, l'orario di arrivo stimato e la distanza rimanente del percorso. Inoltre, la tua app potrà continuare a iscriversi a tutti gli eventi organizzati dall'SDK man mano che il conducente procede. Questo non è appropriato per tutti i casi d'uso e, ovviamente, non è un buon consiglio nei casi in cui il conducente ha bisogno di vedere la mappa e seguire le indicazioni visive. I seguenti screenshot mostrano un confronto fianco a fianco tra l'attivazione/disattivazione delle visualizzazioni delle mappe 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 visualizzarla sullo schermo.
L'SDK Navigation esegue il rendering delle mappe utilizzando Google Maps SDK for Android, che contiene opzioni per impostare lo stile di qualsiasi visualizzazione della mappa non di navigazione nella tua app. La visualizzazione di navigazione supporta anche l'applicazione forzata della modalità oscura. Ciò potrebbe non influire su tutti i dispositivi nello stesso modo a causa delle differenze nel tipo di schermo, ma consente potenziali risparmi di energia in alcuni casi. Un recente studio ha rilevato che la quantità di energia risparmiata dalla modalità Scuro su alcune schermate dipende dalla luminosità iniziale dello schermo. Ad esempio, la modalità oscura consente di risparmiare più energia sugli schermi impostati su luminosità massima rispetto a quelli la cui luminosità è già regolata sul 30-50% del valore massimo. Questo è un aspetto importante da considerare quando si utilizza la modalità Buio per le app, perché il risparmio energetico dipende dal modo in cui l'utente finale imposta la luminosità dello schermo.
Per scoprire 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 rappresenti la tua scelta di stile mappa scuro. Gli stili JSON legacy possono essere creati mediante l'editor di stili legacy all'indirizzo https://mapstyle.withgoogle.com/.
Modificare la frequenza di aggiornamento della posizione GPS
Quando valuti il consumo di energia derivante dagli aggiornamenti di posizione inviati dal dispositivo, concentrati più sulla frequenza degli aggiornamenti della posizione piuttosto che sulla quantità di dati inviati nella trasmissione.
Non puoi controllare direttamente questa funzionalità nell'SDK di navigazione. Tuttavia, se la tua app Android richiede la posizione in modo indipendente, dovresti prendere in considerazione i consigli riportati nell'articolo sull'ottimizzazione della 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 di energia. Per aiutarli a ridurre il consumo energetico delle loro app, consiglia ai tuoi utenti di procedere nel seguente modo:
- Blocca lo smartphone
- Mettere l'app di navigazione in background
- Se possibile, utilizza la navigazione senza mappa
- Riduci la luminosità dello schermo utilizzando la modalità scura per gli schermi OLED e AMOLED o attivando la luminosità adattiva
- Mantieni il dispositivo fresco
- Connettiti alla rete Wi-Fi del veicolo, se disponibile
Misurare il consumo di energia
Puoi utilizzare strumenti di livello professionale per misurare il consumo energetico, ma spesso è difficile o costoso ottenerli. Gli strumenti di profilazione di app e IDE come Power Profiler in Android Studio e il riquadro Utilizzo batteria in XCode Organizer misurano il consumo energetico, ma può essere difficile rimuovere l'effetto dei processi in background o impostare un valore di riferimento per le prestazioni da misurare. In alcuni casi, le limitazioni del dispositivo potrebbero impedire di accedere ai dati necessari.
Puoi utilizzare hardware per il monitoraggio dell'alimentazione per scopi specifici e modificare la configurazione del collegamento della batteria, con prodotti e servizi commerciali disponibili per farlo. Tieni presente che tali modifiche potrebbero invalidare la garanzia del dispositivo.