Em um aplicativo de terminal no Android, insira (requer acesso root):
su
am stop-user USER_ID
Por exemplo, para um usuário convidado, é USER_IDno meu dispositivo 11que o comando seria am stop-user 11.
am stop-user não processa várias entradas, então você deve executar o comando para todos os usuários secundários que deseja pausar.
Isso é um pouco diferente de reiniciar o dispositivo. Se você verificar amo uso, verá,
am stop-user: stop execution of USER_ID, not allowing it to run any code until a later explicit start or switch to it.
Como dito, ele simplesmente interrompe todas as atividades associadas a essa conta de usuário, portanto, sempre que uma inicialização ou troca explícita for fornecida, sua sessão será retomada em vez de começar do zero.
Para confirmação de que o usuário realmente parou ou não está executando, consulte minha resposta para Como descobrir o nome de usuário / ID atualmente em execução no ADB ?
Resumidamente, pm list usersou dumpsys activitydiria se o usuário é RUNNINGou SHUTDOWN. O último comando é melhor. Se a sessão do usuário for realmente interrompida am stop-user, você procuraria mState=SHUTDOWNpor esse usuário. No entanto, se o usuário não tiver sido ativado nem uma vez desde a reinicialização, você não verá nenhuma entrada.
am stopuser 10estava mostrando apenas opm list userscomando como usuário não executando. Eu verifiqueiadb shell psdepoisam stop-user 10e posso encontraru10_axxprocessos em execução. Para verificar se eles foram interrompidos, tentei executar um shell script em um terminal no segundo usuário. O script faz um loop de uma declaração de eco a cada segundo (exibindo o segundo). Depois de iniciar esse script, usando oam stop-user 10comando, aguardando 5 minutos e reiniciando a 2ª sessão do usuário, posso dizer que o script não foi interrompido. Funcionou o tempo todo.