Nei dispositivi mobili di Android, il supporto di più utenti consente agli utenti di eseguire in background (quando un altro utente è attivo) e in primo piano (noti anche come l'utente corrente). Per risparmiare risorse quando appropriato, il sistema gestisce la chiusura degli utenti. È sempre necessario un utente in primo piano.
A partire da Android 10, Android Automotive ha una configurazione predefinita che consente di eseguire solo un massimo di tre utenti alla volta (config_multiuserMaxRunningUsers
). Pertanto, oltre all'utente di sistema headless (utente 0), è possibile configurare un solo utente in primo piano e un solo utente in background.
- In circostanze tipiche, l'utente corrente viene eseguito in primo piano
e l'utente di sistema headless (utente 0) viene eseguito in background. Quando un utente visualizza
spostato in background, l'utente viene arrestato ma non bloccato. Quando il valore massimo
di utenti viene raggiunto, l'utente in background utilizzato meno di recente viene interrotto
bloccato (
config_multiuserDelayUserDataLocking
). - Gli utenti in background fermi e sbloccati vengono riavviati durante la modalità Garage.
Gli utenti ospiti sono effimeri e possono essere eseguiti solo in primo piano. Quando una persona esce dal profilo ospite, l'utente ospite viene interrotto e non può essere eseguito in background.
Processi utente in background
Quando un utente passa dal primo piano allo sfondo (e viceversa), tutte le attività e i servizi in primo piano per quell'utente vengono interrotti. In questo modo vengono interrotti tutti i servizi collegati da questi servizi. Tuttavia, rimangono alcuni aspetti da sistemare. I servizi permanenti delle app di sistema proprietarie e OEM continuano a funzionare finché l'utente (ora in background) non viene interrotto.
I servizi permanenti sono più problematici, in quanto i servizi sono contenuti in un bucket ad alta priorità della rete OOM (Out of Memory) di Android completamente gestito di Google. Anche se le app per l'utente in primo piano richiedono più memoria, quelle e i processi in background non vengono interrotti. Di conseguenza, dall'interfaccia utente punto di vista, i servizi permanenti liberano definitivamente una certa quantità di memoria la memoria viene restituita solo quando una persona riavvia l'auto e viene restituito di utenti vengono interrotti.
Stato dell'utente
Un utente è in stato di fermata (STATE_SHUTDOWN
) finché non viene avviato. Se si imposta una credenziale utente (ad esempio un PIN), l'utente Android esegue ma
rimane bloccato (STATE_RUNNING_LOCKED
) finché una persona non sblocca la schermata di blocco
per quell'utente. Quando l'utente viene sbloccato, il suo spazio di archiviazione con crittografia con credenziali viene decriptato
e le directory dei dati per quell'utente diventano disponibili. Per il tipico passaggio di utenti,
l'utente in background non viene interrotto e rimane in esecuzione e sbloccato
(STATE_RUNNING_UNLOCKED
), una volta sbloccato.
Modalità Garage, JobScheduler e aggiornamenti delle app per gli utenti
La tecnica consigliata per le app per auto e motori per aggiornare i dati è utilizzare JobScheduler
per pianificare l'esecuzione dei job quando un dispositivo è in stato inattivo, tramite la modalità Garage (ad esempio, il download degli aggiornamenti delle app da Google Play). Dopo che le app hanno registrato i job con JobScheduler
e
JobSchedulerService
,
i job vengono eseguiti quando possibile.
CarService invia un segnale a JobSchedulerService
per attivare i job impostati per l'esecuzione
Quando il dispositivo Automotive è inattivo
con la modalità Garage. Affinché JobSchedulerService
esegua job per un utente in background, questo deve essere nello stato STATE_RUNNING_UNLOCKED
. Job in coda
in JobSchedulerService
sono persistenti e sopravvivono attraverso i cicli di spegnimento e riaccensione.
JobScheduler
non può eseguire job per un utente specifico se l'utente non è mai stato sbloccato dopo un ciclo di alimentazione. Tuttavia, quando l'utente è sbloccato e se rimane in
STATE_RUNNING_UNLOCKED
, è possibile eseguire job per l'utente.