Bucket in standby dell'app

Android 9 (livello API 28) e versioni successive supportano i bucket di standby delle app. I bucket standby delle app consentono al sistema di stabilire la priorità delle richieste di risorse delle app in base a quanto recentemente e alla frequenza di utilizzo delle app. In base ai pattern di utilizzo delle app, ogni app viene inserita in uno dei cinque bucket prioritari. Il sistema limita le risorse del dispositivo disponibili per ogni app in base al bucket in cui si trova l'app.

Bucket di priorità

Il sistema assegna dinamicamente ogni app a un bucket di priorità, riassegnando le app in base alle esigenze. Il sistema potrebbe basarsi su un'app precaricata che utilizza il machine learning per determinare la probabilità di utilizzo di ogni app e assegna le app ai bucket appropriati.

Se l'app di sistema non è presente su un dispositivo, per impostazione predefinita il sistema ordina le app in base all'ultima volta che vengono utilizzate. Le app più attive vengono assegnate ai bucket che le assegnano una priorità maggiore, il che rende disponibili per l'app un maggior numero di risorse di sistema. In particolare, il bucket determina la frequenza di esecuzione dei job dell'app e la frequenza con cui l'app può attivare gli allarmi. Queste limitazioni si applicano solo quando il dispositivo è alimentato a batteria. Mentre il dispositivo è in carica, il sistema non impone queste limitazioni.

I bucket di priorità sono i seguenti:

  • Attivo: l'app è in uso o è stata usata molto di recente.
  • Gruppo di lavoro: l'app è in uso regolarmente.
  • Frequente: l'app viene spesso utilizzata, ma non ogni giorno.
  • Rara: l'app non viene utilizzata di frequente.
  • Limitata: l'app consuma molte risorse di sistema o potrebbe presentare comportamenti indesiderati.

Oltre a questi bucket di priorità, è disponibile un bucket mai speciale per le app installate ma mai eseguite. Il sistema impone gravi restrizioni a queste app.

Le seguenti descrizioni riguardano il caso non predittivo. Al contrario, quando la previsione utilizza il machine learning per prevedere il comportamento, i bucket vengono scelti in previsione delle azioni successive dell'utente anziché in base all'utilizzo recente. Ad esempio, un'app utilizzata di recente potrebbe finire nel bucket raro perché il machine learning prevede che potrebbe non essere usata per diverse ore.

Attivo

Un'app è nel bucket attivo mentre è in uso, è usata molto di recente o quando esegue una delle seguenti operazioni:

  • Avvia un'attività.
  • Esegue un servizio in primo piano a lunga esecuzione.
  • Viene toccato dall'utente all'interno di una notifica.

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

L'interazione utente assegna le app come attive

Su Android 9 (livello API 28) e versioni successive, quando l'utente interagisce con la tua app in determinati modi, il sistema inserisce temporaneamente l'app nel bucket attivo. Quando l'utente smette di interagire con la tua app, il sistema la inserisce in un bucket in base alla cronologia di utilizzo.

Di seguito sono riportati alcuni esempi di interazioni che attivano questo comportamento del sistema:

  • L'utente tocca una notifica inviata dall'app.

  • L'utente interagisce con un servizio in primo piano nella tua app toccando un pulsante multimediale.

  • L'utente si connette alla tua app mentre interagisce con il sistema operativo Android Automotive, in cui la tua app utilizza un servizio in primo piano o CONNECTION_TYPE_PROJECTION.

Set da lavoro

Un'app si trova nel bucket del set di lavoro se viene eseguita spesso, ma non è attiva. Ad esempio, è probabile che l'app di social media che l'utente lancia quasi ogni giorno si trova nel set operativo. Le app vengono anche promosse al bucket del set di lavoro se usate indirettamente.

Se un'app è nel set operativo, il sistema impone lievi restrizioni alla sua capacità di eseguire job e attivare allarmi. Per maggiori dettagli, consulta Restrizioni 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 corre in palestra potrebbe trovarsi nel bucket frequente.

Se un'app si trova nel bucket frequente, il sistema impone restrizioni più forti alla sua capacità di eseguire job e attivare allarmi. Per maggiori dettagli, consulta Restrizioni alla gestione dell'alimentazione.

Rara

Un'app si trova nel bucket raro se non viene utilizzata spesso. Ad esempio, un'app di hotel che l'utente esegue solo mentre soggiorna in quell'hotel potrebbe essere inclusa nel raro bucket.

Se un'app si trova nel bucket raro, il sistema impone rigide restrizioni sulla sua capacità di eseguire job e attivare allarmi. Il sistema limita anche la capacità dell'app di connettersi a internet. Per maggiori dettagli, consulta Restrizioni alla gestione dell'alimentazione.

Con restrizioni

Questo bucket, aggiunto in Android 12 (livello API 31), ha la priorità più bassa e le limitazioni più elevate di tutti i bucket. Il sistema considera il comportamento della tua app, ad esempio la frequenza con cui l'utente interagisce con essa, per stabilire se posizionare l'app nel bucket limitato.

Su Android 13 (livello API 33) e versioni successive, a meno che la tua app non sia idonea per un'esenzione, il sistema inserisce l'app nel bucket con restrizioni nelle seguenti situazioni:

  • L'utente non interagisce con la tua app per un determinato numero di giorni. Su Android 12 (livello API 31) e 12L (livello API 32), il numero di giorni è 45. Android 13 riduce il numero di giorni a 8.

  • La tua app richiama un numero eccessivo di trasmissioni o binding in un periodo di 24 ore.

Se il sistema inserisce la tua app nel bucket limitato, si applicano le seguenti restrizioni:

  • Puoi eseguire job una volta al giorno in una sessione in batch di 10 minuti. Durante questa sessione, il sistema raggruppa i job della tua app con i job di altre app.
    • I job limitati non vengono eseguiti in modo autonomo. Deve essere presente almeno un altro job in esecuzione o in attesa contemporaneamente, che può includere qualsiasi altro job.
  • La tua app può eseguire meno job accelerato rispetto a quando il sistema inserisce l'app in un bucket meno restrittivo.
  • L'app può attivare una sveglia al giorno. Può trattarsi di una sveglia esatta o inesatta.

Esenzioni dal bucket limitato

I seguenti tipi di app non possono accedere al bucket limitato e ignorare l'attivatore di inattività, anche su Android 12 e versioni successive:

valuta il bucket di priorità

Per controllare a quale bucket è assegnata la tua app, esegui una delle seguenti operazioni:

  • Chiama il numero getAppStandbyBucket().

  • Esegui questo comando in una finestra del terminale:

    adb shell am get-standby-bucket PACKAGE_NAME

Il sistema limita la tua app ogni volta che viene inserita in un bucket standby delle app il cui valore è maggiore di STANDBY_BUCKET_ACTIVE (10).

Best practice

Se la tua app segue le best practice per Sospensione e standby app, le funzionalità di gestione dell'alimentazione successive non sono difficili. Tuttavia, alcuni comportamenti delle app che in precedenza funzionavano bene potrebbero causare problemi.

  • Non provare a manipolare il sistema per inserire la tua app in un determinato bucket. Il metodo di assegnazione della priorità del sistema può cambiare e ogni produttore di dispositivi può scegliere di scrivere la propria app di bucket con il proprio algoritmo. Assicurati invece che l'app si comporti correttamente, indipendentemente dal bucket in cui si trova.
  • Se un'app non ha un'attività in Avvio applicazioni, potrebbe non essere mai promossa al bucket attivo. Prendi in considerazione la possibilità di riprogettare la tua app per offrire un'attività di questo tipo.
  • Se gli utenti non possono interagire con le notifiche dell'app, non saranno in grado di attivare la promozione dell'app al bucket attivo. In questo caso, valuta la possibilità di riprogettare alcune notifiche che consentano agli utenti di interagire. Per alcune linee guida, consulta la sezione Modelli di progettazione delle notifiche di Material Design.

  • Se l'app non mostra una notifica alla ricezione di un messaggio FCM (Firebase Cloud Messaging) ad alta priorità, l'utente non può interagire con l'app e quindi promuoverla al bucket attivo. Infatti, l'unico utilizzo previsto per i messaggi FCM ad alta priorità è l'invio di una notifica all'utente, quindi questa situazione non deve verificarsi. A partire dalla versione 12L (livello API 32), se contrassegni in modo inappropriato un messaggio FCM come priorità elevata quando non attiva l'interazione dell'utente, la priorità dei messaggi futuri può essere ridotta.

  • Se le app sono suddivise in più pacchetti, questi potrebbero trovarsi in bucket diversi e avere livelli di accesso differenti. Testa queste app con i pacchetti assegnati ai vari bucket per assicurarti che funzionino correttamente.