No Android para dispositivos móveis, o suporte a vários usuários permite que eles sejam executados em segundo plano (quando outro usuário está ativo) e em primeiro plano (também conhecido como o usuário atual). Para conservar recursos quando apropriado, o sistema gerencia o encerramento de usuários. Sempre é necessário ter um usuário em primeiro plano.
A partir do Android 10, o Android Automotive tem uma configuração
padrão que permite que apenas três usuários sejam executados por vez
(config_multiuserMaxRunningUsers
). Portanto, além do usuário do sistema
sem cabeça (Usuário 0), apenas um usuário em primeiro plano e um em segundo plano podem ser configurados.
- Em circunstâncias normais, o usuário atual é executado em primeiro plano
e o usuário do sistema sem cabeça (usuário 0) é executado em segundo plano. Quando um usuário é
movido para o segundo plano, ele é interrompido, mas não bloqueado. Quando o número máximo
de usuários é atendido, o usuário em segundo plano usado menos recentemente é interrompido e
travado (
config_multiuserDelayUserDataLocking
). - Os usuários em segundo plano parados e desbloqueados são reiniciados durante o Modo garagem.
Os usuários convidados são temporários e só podem ser executados em primeiro plano. Quando uma pessoa sai do modo convidado, o usuário convidado é interrompido e não pode ser executado em segundo plano.
Processos do usuário em segundo plano
Quando um usuário é trocado do primeiro plano para o segundo plano (e vice-versa), todas as atividades e serviços em primeiro plano para esse usuário sejam encerrados. Isso interrompe todos os serviços vinculados a esses serviços. No entanto, ainda há algumas coisas para limpar. Persistente serviços de apps de sistema primários e OEM continuem funcionando enquanto o usuário (agora em segundo plano) não é interrompido.
Os serviços persistentes são mais problemáticos, serviços ficam em um bucket de alta prioridade na saída de memória (OOM, na sigla em inglês) do Android. em um sistema de gerenciamento de identidade. Mesmo que os apps para o usuário em primeiro plano exijam mais memória, esses processos em segundo plano persistentes não são encerrados. Como resultado, da interface do usuário os serviços persistentes usam permanentemente uma quantidade de memória essa memória é retornada somente quando uma pessoa reinicializa o carro e qualquer fundo usuários sejam interrompidos.
Estado do usuário
Um usuário fica em estado interrompido (STATE_SHUTDOWN
) até que
for iniciado. Se uma credencial de usuário (como um PIN) estiver definida, o usuário do Android será executado, mas
permanecerá bloqueado (STATE_RUNNING_LOCKED
), até que uma pessoa desbloqueie a tela de bloqueio
para esse usuário. Quando o usuário é desbloqueado, o armazenamento criptografado por credenciais é descriptografado.
e os diretórios de dados desse usuário ficam disponíveis. Para a troca típica de usuários,
o usuário em segundo plano não seja interrompido, permaneça em execução e desbloqueado
(STATE_RUNNING_UNLOCKED
) após o desbloqueio.
Modo garagem, JobScheduler e atualizações de apps para os usuários
A técnica recomendada para que os apps automotivos atualizem dados é usar JobScheduler
para programar a execução de jobs quando um dispositivo estiver inativo, pelo Modo garagem (por exemplo, fazer o download
de atualizações do app do Google Play). Depois que os apps registrarem jobs com JobScheduler
e
JobSchedulerService
,
os jobs serão executados quando possível.
CarService envia um sinal para JobSchedulerService
para acionar jobs definidos para execução
quando o dispositivo automotivo está inativo.
com o modo garagem. Para que JobSchedulerService
execute jobs para um usuário em segundo plano,
o usuário deve estar no estado STATE_RUNNING_UNLOCKED
. Jobs na fila
em JobSchedulerService
são persistidos e sobrevivem aos ciclos de energia.
JobScheduler
não pode executar trabalhos para um usuário específico se ele nunca foi
desbloqueado após um ciclo de energia. No entanto, quando o usuário é desbloqueado e permanece em
STATE_RUNNING_UNLOCKED
, os jobs do usuário podem ser executados.