Gestione alimentazione

Android 9 (livello API 28) introduce nuove funzionalità per migliorare la gestione dell'alimentazione del dispositivo. Questi modifiche, insieme alle funzionalità già presenti nelle versioni precedenti, per assicurarti che le risorse di sistema vengano assegnate alle app che ne hanno più bisogno.

Le funzionalità di gestione dell'alimentazione rientrano in due categorie:

Bucket di standby delle app
Il sistema limita le app alle risorse del dispositivo, come CPU o batteria, in base ai modelli di utilizzo dell'utente. Questa è una nuova funzionalità per Android 9.
Miglioramenti al risparmio energetico
Quando il risparmio energetico è attivo, il sistema pone limitazioni su tutte le app. Si tratta di una funzionalità esistente migliorata con Android 9.

Bucket di standby delle app

Android 9 introduce una nuova funzionalità di gestione della batteria, i bucket di app in standby. I bucket di standby delle app aiutano il sistema a dare la priorità alle app di richieste di risorse basate recente e alla frequenza di utilizzo delle app. In base all'utilizzo dell'app ogni app viene inserita in uno dei cinque bucket di priorità. Il sistema limita le risorse del dispositivo disponibili per ogni app in base al bucket dell'app .

I cinque bucket assegnano la priorità alle app in gruppi in base alle seguenti caratteristiche:

Sistema attivo

Un'app è nel bucket attivo se l'utente la sta attualmente utilizzando, per esempio:

  • L'app ha avviato un'attività
  • L'app è in esecuzione con un servizio in primo piano
  • L'app ha un'apposita funzionalità associata a un fornitore di contenuti utilizzato da un'app in primo piano
  • L'utente fa clic su una notifica dall'app

Se un'app si trova nel bucket attivo, il sistema non applica limitazioni ai job, agli allarmi o ai messaggi FCM dell'app.

Set di lavoro

Un'app si trova nel bucket del set di lavoro se viene eseguita di frequente, ma al momento non è attiva. Ad esempio, un'app di social media che l'utente avvia la maggior parte dei giorni potrebbero rientrare nel set di lavoro. Le app vengono promosse anche al bucket del set di lavoro se vengono utilizzate indirettamente.

Se un'app fa parte del set di lavoro, il sistema impone restrizioni lievi sul suo di eseguire job e attivare gli allarmi. Per maggiori dettagli, vedi Limitazioni relative alla gestione dell'alimentazione.

Spesso

Un'app si trova nel bucket frequente se viene utilizzata regolarmente, ma non necessariamente ogni giorno. Ad esempio, un'app di monitoraggio dell'allenamento che l'utente utilizza in palestra potrebbe trovarsi nel bucket Frequenti.

Se un'app si trova nel bucket frequente, il sistema impone restrizioni più severe alle di eseguire job e attivare gli allarmi, oltre a imporre un limite messaggi FCM ad alta priorità. Per maggiori dettagli, vedi Limitazioni relative alla gestione dell'alimentazione.

Rara

Un'app si trova nel bucket raro se non viene utilizzata spesso. Ad esempio, un'app per hotel che l'utente sia in esecuzione solo mentre si trova in quell'hotel potrebbe essere nella rara di sincronizzare la directory di una VM con un bucket.

Se un'app si trova nel bucket raro, il sistema impone limitazioni severe alla sua capacità di eseguire job, attivare allarmi e ricevere messaggi FCM ad alta priorità. Il sistema limita anche la capacità dell'app di connettersi a internet. Per maggiori dettagli, consulta Restrizioni alla gestione dell'alimentazione.

Mai

Le app che sono state installate, ma non sono mai state eseguite, vengono assegnate al bucket Never. Il sistema impone gravi limitazioni a queste app.

Il sistema assegna dinamicamente ogni app a un bucket di priorità e riassegna le app in base alle esigenze. Il sistema potrebbe fare affidamento su un'app precaricata che utilizza il machine learning per determinare la probabilità di utilizzo di ogni app e assegnarle ai bucket appropriati. Se l'app di sistema non è presente su un dispositivo, per impostazione predefinita le app vengono ordinate in base alla data di utilizzo. Ai bucket vengono assegnate più app attive maggiore è la priorità delle app, in modo che più risorse di sistema a disposizione dell'app. In particolare, il bucket determina la frequenza di esecuzione dei job dell'app, la frequenza con cui l'app può attivare sveglie e la frequenza con cui l'app può ricevere Firebase Cloud Messaggi (FCM) di messaggistica. Queste limitazioni si applicano solo quando il dispositivo è in funzione a batteria; il sistema non le impone sulle app quando il dispositivo è in carica.

Ogni produttore può impostare i propri criteri per stabilire il livello di attività delle app assegnati ai bucket. Non dovresti cercare di influire sul bucket a cui è assegnata la tua app. Cerca invece di assicurarti che l'app funzioni bene in qualsiasi del bucket in cui potrebbe trovarsi. L'app può scoprire il bucket in cui si trova attualmente chiamando il nuovo metodo UsageStatsManager.getAppStandbyBucket().

Best practice

Se la tua app segue già le best practice per Sospensione e modalità standby dell'app, gestire le nuove funzionalità di gestione dell'alimentazione non dovrebbe essere difficile. Tuttavia, alcuni comportamenti delle app che in precedenza funzionavano bene ora potrebbero causare problemi.

  • Non cercare di manipolare il sistema per collocare la tua app in un bucket o un'altra. I metodi di raggruppamento del sistema possono cambiare e ogni produttore di dispositivi può scegliere di scrivere la propria app di raggruppamento con il proprio algoritmo. Assicurati invece che l'app si comporti in modo appropriato, indipendentemente dal fatto che del bucket in cui si trova.
  • Se un'app non ha un'attività in Avvio applicazioni, potrebbe non essere mai promossa nella un bucket attivo. Ti consigliamo di riprogettare l'app in modo da includere un'attività di questo tipo.
  • Se le notifiche dell'app non sono utilizzabili, gli utenti non potranno attivarle la promozione dell'app nel bucket attivo interagendo con le notifiche. Nella in questo caso, ti consigliamo di riprogettare alcune notifiche appropriate in modo che consentano una risposta dall'utente. Per alcune linee guida, consulta Design delle notifiche Material Design modelli.
  • Analogamente, se l'app non mostra una notifica al ricevimento di un messaggio FCM di alta priorità, non darà all'utente la possibilità di interagire con l'app e quindi di promuoverla nel bucket attivo. Infatti, l'unico utilizzo previsto per i messaggi FCM con priorità elevata è inviare una notifica all'utente, pertanto questa situazione non dovrebbe mai verificarsi. Se contrassegni in modo inappropriato un messaggio FCM come ad alta priorità quando non attiva l'interazione dell'utente, possono verificarsi altre conseguenze negative. Ad esempio, l'app potrebbe esaurire la quota, causando il trattamento come priorità normale dei messaggi FCM realmente urgenti.

    Nota: se l'utente ignora ripetutamente una notifica, il sistema gli offre la possibilità di bloccarla in futuro. Non inviare spam all'utente con notifiche solo per cercare di mantenere la tua app nella un bucket attivo.

  • Se le app sono suddivise in più pacchetti, questi pacchetti potrebbero trovarsi in diversi bucket e, di conseguenza, avere livelli di accesso diversi. Devi assicurarti di testare queste app con pacchetti assegnati a vari bucket per verificare che che l'app si comporti correttamente.

Miglioramenti al risparmio energetico

Android 9 apporta una serie di miglioramenti alla modalità di risparmio energetico. Il produttore del dispositivo determina le limitazioni precise imposte. Ad esempio, su AOSP, il sistema applica le seguenti restrizioni:

  • Il sistema mette le app in modalità standby delle app in modo più aggressivo, anziché in attesa che l'app sia inattiva.
  • I limiti di esecuzione in background si applicano a tutte le app, indipendentemente dal livello dell'API di destinazione.
  • I servizi di geolocalizzazione potrebbero essere disattivati quando lo schermo è spento.
  • Le app in background non hanno accesso alla rete.

Esistono inoltre altre ottimizzazioni del consumo specifiche del dispositivo. Per la carica completa per i dettagli, consulta la pagina che descrive la gestione dell'alimentazione limitazioni.

Come sempre, è buona prassi testare l'app con il risparmio energetico attivo. Puoi attivare manualmente il risparmio energetico dalla schermata Impostazioni > Risparmio energetico del dispositivo.

Test e risoluzione dei problemi

Le nuove funzionalità di gestione dell'alimentazione interessano tutte le app in esecuzione sui dispositivi Android 9, indipendentemente dal fatto che le app abbiano o meno come target Android 9. È importante assicurarsi che l'app funzioni correttamente su questi dispositivi.

Assicurati di testare i casi d'uso principali della tua app in una serie di condizioni per vedere come le funzionalità di gestione dell'alimentazione interagiscono tra loro. Puoi utilizzare i comandi di Android Debug Bridge per attivare e disattivare alcune funzionalità.

Comandi Android Debug Bridge

Puoi utilizzare i comandi della shell di Android Debug Bridge. per testare varie funzionalità di gestione dell'alimentazione.

Per informazioni sull'utilizzo di ADB per mettere il dispositivo in modalità Sospensione, consulta Eseguire test con Sospensione e App in attesa.

Bucket di standby delle app

Puoi utilizzare ADB per assegnare manualmente la tua app a un bucket di standby dell'app. Per modificare il bucket di un'app, utilizza il comando seguente:

$ adb shell am set-standby-bucket packagename active|working_set|frequent|rare

Puoi anche utilizzare questo comando per impostare più pacchetti contemporaneamente:

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

Per controllare il bucket in cui si trova un'app, esegui

$ adb shell am get-standby-bucket [packagename]

Se non specifichi un parametro packagename, il comando elenca i bucket per tutte le app. Un'app può anche trovare il proprio bucket in fase di esecuzione chiamando il nuovo metodo UsageStatsManager.getAppStandbyBucket().

Risparmio energetico

Esistono diversi comandi per testare il comportamento dell'app in condizioni di basso consumo energetico.

Per simulare lo scollegamento del dispositivo, utilizza il comando

$ adb shell dumpsys battery unplug

Per testare il comportamento del dispositivo in condizioni di bassa alimentazione, utilizza questo comando:

$ adb shell settings put global low_power 1

Al termine dei test, puoi annullare le impostazioni manuali del dispositivo con questo comando:

$ adb shell dumpsys battery reset