Risparmiare carica e batteria

L'efficienza energetica è particolarmente importante su Wear OS. I principi di progettazione di Wear OS si concentrano in modo significativo sull'utilizzo della potenza del dispositivo perché l'orologio è un fattore di forma ridotto, pensato per interazioni brevi.

Rispetto ai dispositivi mobili più grandi, i dispositivi Wear OS hanno batterie più piccole, per cui l'eventuale consumo della batteria è più evidente. Inoltre, ricaricare un dispositivo Wear OS richiede uno sforzo maggiore rispetto a un dispositivo mobile. Gli utenti possono ricaricare i dispositivi mobili a vari intervalli durante la giornata, ma devono comunque staccare un dispositivo Wear OS dal corpo prima di farlo.

Per migliorare l'efficienza energetica della tua app, segui queste best practice di progettazione:

  • Il design della tua app deve utilizzare in modo ottimale il fattore di forma Wear OS. Non deve copiare direttamente l'app mobile.
  • Usa la tua app mobile esistente per alcuni casi d'uso. Ad esempio, internet e sincronizzazione sull'orologio sono costosi; valuta se il dispositivo mobile potrebbe svolgere le operazioni più complesse e se il dispositivo Wear OS riceve modifiche ai dati.
  • Progetta i tuoi casi d'uso per interazioni più brevi.
  • Valuta quali eventi Wear OS utilizzi e con quale frequenza si verificano.
  • Quando possibile, posticipa il lavoro dell'app finché lo smartwatch non si carica. Questo vale in particolare per le attività che richiedono un uso intensivo dei dati, come la sincronizzazione dei dati e l'organizzazione dei database.

    Se il dispositivo è in carica e dispone di una connessione Wi-Fi, pianifica job per precaricare dati, immagini e aggiornamenti che l'utente potrebbe voler vedere nella tua app.

Questa guida all'alimentazione ti aiuta a capire quando e come il sistema esegue la tua app e come puoi limitare il tempo di esecuzione e il consumo della batteria dell'app. Per scoprire di più su come vengono eseguite determinate azioni, come il caricamento di un'app o lo scorrimento di un elenco, consulta le indicazioni relative alle prestazioni, ad esempio la guida alle prestazioni di Scrivi su Wear OS.

Monitora l'utilizzo della batteria nel tempo

Per analizzare le statistiche sulla batteria di un dispositivo Wear OS che esegue la tua app, inserisci il seguente comando in una finestra del terminale sulla tua macchina di sviluppo:

adb shell dumpsys batterystats

Una libreria su GitHub include un analizzatore sintattico delle statistiche della batteria, che potrebbe essere utile eseguire insieme a questo comando.

Eventi che influiscono sulla durata della batteria

Prima di pensare in modo specifico alla tua app, è bene considerare più in generale gli eventi che consumano energia su un dispositivo Wear OS.

La tabella seguente mostra l'effetto relativo sulla durata della batteria in diversi eventi comuni nelle app per Wear OS. Il consumo esatto di corrente varia in base al dispositivo.

Evento Impatto sulla durata della batteria Come mitigare
Accesso alla rete, incluse le opzioni LTE e Wi-Fi Molto alto Rimanda l'accesso alla rete non essenziale fino a quando il dispositivo non è in carica.
Attiva lo schermo e avvia la modalità interattiva Alto Non incoraggiare l'utente a mantenere lo schermo acceso più a lungo del necessario. Fornisci un'esperienza che utilizza la modalità sempre attiva, nota anche come modalità Ambient.
Accesso al sensore GPS Alto Se possibile, attendi che l'utente richieda l'accesso al GPS.
Mantieni alto l'utilizzo della CPU Alto Utilizza flussi utilizzando Jetpack Compose.
Accesso al sensore del battito cardiaco Medium Utilizza il tempo di veglia del processore quando ricevi i callback dall'API dei sensori, ad esempio quando utilizzi Health Services su Wear OS.
Accedere a un altro dispositivo tramite Bluetooth Medium Le sessioni devono essere brevi.
Impugna un wakelock Medium Riduci la creazione manuale di wakelock e utilizza WorkManager.

Ridurre al minimo il tempo di utilizzo

Nell'app Wear OS, segui questi principi di utilizzo dello schermo:

  • Blocchi dello schermo: evitali, se possibile. Per verificare, disattiva l'opzione Display sempre attivo nelle impostazioni di sistema e osserva se lo schermo si spegne entro il periodo di timeout.
  • Animazioni: riduci al minimo le animazioni elaborate e concentrati su brevi transizioni per ottenere un aspetto più professionale. In particolare, evita animazioni e loop di lunga durata. Se è necessario creare un loop, aggiungi una pausa tra i loop della durata dell'animazione stessa.
  • Tempo di veglia in modalità Ambient: assistenza sempre attiva se necessario, ad esempio per i casi d'uso relativi all'attività fisica. Se la tua app richiede l'attivazione costante, verifica che l'app compia quanto segue quando il dispositivo è in modalità Ambient:

    • Riduce la percentuale dello schermo del dispositivo illuminato.
    • Non mostra le animazioni.
    • Non aggiorna i contenuti dello schermo, a meno che non si tratti di un callback onAmbientUpdate().

Riduci al minimo l'utilizzo della CPU

Nell'app Wear OS, segui questi principi di utilizzo della CPU:

  • Mantieni un utilizzo breve.
  • Raggruppare eventuali operazioni correlate per massimizzare il tempo di inattività del processo della tua app.

Riduci al minimo i wakelock

Nella maggior parte dei casi, evita operazioni che impediscono la sospensione dell'app, ad esempio i wakelock. Ad esempio, nelle app per la salute e l'attività fisica, gli esercizi a lunga durata non hanno bisogno di un wakelock. Usa il tempo di veglia del processore quando ricevi i callback dall'API dei sensori, ad esempio quando utilizzi Health Services su Wear OS.

In alcuni casi è consentito acquisire un wakelock, ad esempio quando l'app esegue una delle seguenti operazioni:

  • Riproduce contenuti multimediali in background.
  • Usa WorkManager o JobScheduler. Il sistema blocca un wakelock per tuo conto quando esegui il job in background.

La cronologia della batteria ti consente di vedere le singole occorrenze di lunghi wakelock, nonché i riepiloghi del numero totale e della durata dei wakelock sospesi. Controlla il numero e la durata dei wakelock bloccati dalla tua app e confronta queste informazioni con i pattern di utilizzo interattivi della tua app:

  • Controlla se sono presenti wakelock imprevisti.
  • Se la durata è più lunga del previsto, valuta se il lavoro è bloccato su una dipendenza, come la disponibilità della rete.

Controlla il modo in cui la tua app diventa inattiva

Valuta cosa sta facendo l'app attiva quando si verificano eventi chiave del dispositivo, ad esempio questi:

  • Lo schermo si spegne e il dispositivo entra in modalità Ambient.
  • L'app viene ignorata con scorrimento.

Per analizzare l'attività delle app, utilizza gli strumenti indicati nelle sezioni seguenti.

Profiler di energia

Puoi accedere a Energy Profiler nel menu di Android Studio selezionando Visualizza > Finestre degli strumenti > Profiler:

  1. Esamina la traccia di sistema quando lo schermo si spegne e il dispositivo entra in modalità Ambient.
  2. Cerca eventuali attività continuative e il livello di utilizzo della CPU del dispositivo.

Perfetto

Perfetto ti consente di registrare una traccia e quindi di esaminare la tua app per verificare se ci sono thread che stanno funzionando quando lo schermo si spegne, il dispositivo entra in modalità Ambient o l'utente ignora l'attività dell'app.

Definisci gli eventi personalizzati per contrassegnare gli eventi significativi della tua app, inclusi quelli specifici del dominio. Per un'app multimediale, ciò include attività come il recupero delle playlist, il download di un elemento multimediale specifico, l'avvio della riproduzione e l'interruzione della riproduzione. Se definisci questi eventi, puoi visualizzarli in Perfetto e confrontarne la tempistica con la CPU e l'utilizzo della potenza della tua app.

Analizzare i job pianificati della tua app

I job pianificati, utilizzando WorkManager, ti consentono di eseguire le operazioni in background nella tua app. Anche se alcune operazioni in background devono essere periodiche, non eseguire job troppo frequenti o per molto tempo, perché potrebbero scaricare la batteria del dispositivo.

Usa Cronologia della batteria per esaminare l'esecuzione dei job pianificati, sia nel complesso (Statistiche di sistema > Statistiche Jobscheduler) che per app (Statistiche app > Lavoro pianificato). Controlla il conteggio totale e la durata totale:

  • Se un job viene eseguito molto spesso, valuta la possibilità di ridurre questa frequenza.
  • Controlla che il tempo totale di esecuzione corrisponda a quello previsto e che non sia notevolmente più lungo.

Inoltre, esamina il grafico della cronologia della batteria, esaminando ogni voce di JobScheduler. Quando tieni premuto il puntatore su una determinata voce, Battery History mostra il proprietario del job in esecuzione. Tieni in considerazione:

  • Per la tua app, la durata dell'esecuzione dovrebbe essere adeguata.
  • Valuta se i job si verificano mentre la tua app è in esecuzione o se i job rappresentano lavori periodici in background.

Sensori

I dispositivi Wear OS sono dotati di molti sensori diversi, ad esempio il GPS. Nella maggior parte dei casi, utilizza Servizi sanitari su Wear OS anziché interagire direttamente con SensorManager. In molti casi, Health Services raggruppa in modo intelligente i dati per migliorare le prestazioni della batteria.

Per analizzare l'utilizzo dei sensori nella tua app, esegui questo comando in una finestra del terminale sulla tua macchina di sviluppo:

adb shell dumpsys sensorservice

I risultati di questo comando mostrano quanto segue:

  • Registrazioni attuali e precedenti dei sensori.
  • Configurazione del sensore, incluso il raggruppamento, se impostato.
  • Dati campionati di recente.

Testare l'annullamento della registrazione dai sensori

Per verificare se la tua app smette di recuperare i dati dei sensori come previsto, prova i seguenti scenari:

  1. Fai scorrere per ignorare l'app.
  2. Tocca lo schermo con il palmo. Lo schermo si spegne oppure si trova in modalità Ambient.

Utilizza il comando ADB della sezione precedente per verificare se il sensore viene visualizzato correttamente come non registrato.

Livello dati

Quando si utilizza l'API di livello dati, ogni trasmissione consuma un po' di potenza. In particolare, se utilizzi questa API per inviare i dati, l'app deve attivarsi per riceverli. Per questi motivi, è consigliabile utilizzare questa API in modo prudente.

Ecco alcune best practice aggiuntive per l'utilizzo dell'API del livello dati:

  • Attendi che l'app sia attiva prima di configurare un listener utilizzando WearableListenerService.
  • Trasmettere le modifiche dello stato invece di configurare aggiornamenti rapidi. Queste modifiche dello stato consentono al dispositivo Wear OS di eseguire calcoli dei dati locali, ad esempio l'inizio di una sessione di allenamento.

    Trasmetti solo modifiche di stato che aggiornano la tua UI. Ad esempio, se la schermata delle attività mostra solo "chilometri percorsi" con una posizione decimale, non inviare una modifica dello stato a Wear OS ogni volta che l'utente sposta un altro metro in avanti.

Per analizzare l'utilizzo dell'API Data Layer nella tua app, esegui questo comando in una finestra del terminale sulla tua macchina di sviluppo:

adb shell dumpsys activity service WearableService

I risultati di questo comando includono quanto segue:

  • RpcService: consente di sapere con quale frequenza e quali percorsi vengono chiamati utilizzando MessageClient.
  • DataService: consente di visualizzare la frequenza di impostazione degli elementi di dati utilizzando DataClient.

App per la salute e l'attività fisica

Se gestisci un'app per la salute e l'attività fisica, utilizza Servizi sanitari per ottimizzare l'uso dei sensori nella tua app.

Riquadri e complicazioni

Se la tua app supporta un riquadro o una complicazione, segui queste best practice:

  • Disabilita l'aggiornamento automatico o aumenta la frequenza di aggiornamento a 2 ore o più.
  • Utilizza Firebase Cloud Messaging (FCM) o job pianificati in modo appropriato per inviare aggiornamenti dei dati. Fai attenzione a evitare una frequenza di aggiornamenti rapida, il che può far sì che il sistema pianifichi il lavoro ripetuto a una velocità più elevata di quella che l'utente o la piattaforma possono accedere ai dati necessari per svolgere tale operazione.
  • Non pianificare il lavoro per il riquadro o la complicazione quando l'utente non interagisce con l'elemento.
  • Utilizza approcci offline.
  • Condividi un singolo database tra l'app principale, i riquadri e le complicazioni. Questo consente di mantenere la coerenza dei dati anche sulle varie piattaforme dell'interfaccia utente.