Gestione alimentazione

Android 9 (livello API 28) introduce nuove funzionalità per migliorare la gestione dell'alimentazione dei dispositivi. 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 in 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 che migliorato con Android 9.
di Gemini Advanced.
.

Bucket standby dell'app

Android 9 introduce una nuova funzionalità di gestione della batteria, App Standby Buckets. 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 esegue un servizio in primo piano
  • L'app dispone di un adattatore di sincronizzazione associato 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 alcuna limitazione i lavori, le sveglie o i messaggi FCM dell'app.

Insieme di lavoro

Un'app si trova nel bucket del set di lavoro se viene eseguita spesso, ma al momento non lo è attivo. 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 inoltre promosse nel set di lavoro se vengono usati 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 esegue in palestra. potrebbe trovarsi nel bucket frequente.

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 restrizioni rigide alla la 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 Per maggiori dettagli, consulta la sezione Limitazioni della gestione dell'alimentazione.

Mai

Le app che sono state installate ma che non vengono mai eseguite vengono assegnate al bucket che non è mai stato eseguito. 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 basarsi su un'app precaricata che utilizza un di apprendimento per determinare la probabilità dell'app e le assegna ai bucket appropriati. Se il sistema non è presente su un dispositivo, per impostazione predefinita il sistema ordina le app in base a da quando sono stati utilizzati. 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 è alimentato a batteria. il sistema non impone queste limitazioni alle app mentre 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 influenzare il bucket della tua app a cui è assegnato. Cerca invece di assicurarti che l'app funzioni bene in qualsiasi del bucket in cui potrebbe trovarsi. La tua app può scoprire in quale bucket si trova attualmente chiamando il nuovo metodo UsageStatsManager.getAppStandbyBucket()

Best practice

Se la tua app segue già le best practice per Sospensione e standby delle app, 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 bucketing del sistema possono cambiare e ogni dispositivo potrebbe scegliere di scrivere la propria app di bucketing con dell'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. Potrebbe essere utile riprogettare l'app per avere una attività.
  • 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 alla ricezione di un messaggio FCM ad alta priorità, non offrono all'utente la possibilità di interagire con l'app e quindi di promuoverla del bucket attivo. Infatti, l'unico utilizzo previsto dei messaggi FCM ad alta priorità è la inviare una notifica all'utente, in modo che questa situazione non si verifichi mai. Se contrassegnare in modo inappropriato un messaggio FCM come priorità elevata quando non si attiva l'interazione dell'utente può causare altre conseguenze negative; ad esempio può causare l'esaurimento della quota da parte dell'app, causando un'urgenza Messaggi FCM da trattare come priorità normale.

    Nota: se l'utente ignora più volte una notifica, verrà offre all'utente la possibilità di bloccare quella notifica 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 potrebbero trovarsi in bucket diversi e, di conseguenza, hanno 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 dall'API target livello.
  • I servizi di geolocalizzazione potrebbero essere disattivati quando lo schermo è spento.
  • Le app in background non hanno accesso alla rete.

Inoltre, ci sono altre ottimizzazioni dell'alimentazione specifiche per dispositivo. Per la carica completa per i dettagli, consulta la pagina che descrive la gestione dell'alimentazione limitazioni.

Come sempre, è consigliabile testare l'app mentre è attivo il risparmio energetico. Tu può attivare manualmente il risparmio energetico da Impostazioni > Batteria schermo.

Test e risoluzione dei problemi

Le nuove funzionalità di gestione dell'alimentazione interessano tutte le app eseguite sui dispositivi Android 9, che siano o meno le app abbiano 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 interagiscono tra loro le funzionalità di gestione dell'alimentazione. Puoi usare Android Debug Bridge per attivare alcune delle le funzionalità di machine learning.

Comandi Android Debug Bridge

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

Per informazioni sull'utilizzo di ADB per attivare la modalità Sospensione del dispositivo, vedi Test con sospensione e standby delle app.

Bucket standby dell'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 passi un parametro packagename, il comando elenca per tutte le app. Un'app può anche trovare il proprio bucket in fase di runtime chiamando il nuovo metodo UsageStatsManager.getAppStandbyBucket()

Risparmio energetico

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

Per simulare lo scollegamento del dispositivo, utilizza il comando

$ adb shell dumpsys battery unplug

Per verificare il comportamento del dispositivo in condizioni di bassa potenza, utilizza questo comando:

$ adb shell settings put global low_power 1

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

$ adb shell dumpsys battery reset