Sessão encerrada no dispositivo com vários usuários?

10

Há uma opção para alternar entre usuários, mas não há uma opção para sair de uma sessão de usuário ativo. Os aplicativos e serviços em segundo plano para usuários inativos (depois de conectados e desconectados) continuam funcionando, esgotando a bateria.

A única maneira que penso é reiniciar o dispositivo e não fazer login no usuário.

Portanto, existe alguma maneira de o proprietário forçar usuários inativos subsequentes a sair da sessão? Eu tenho acesso de superusuário ao proprietário com android-5.0.2.

Bharat G
fonte

Respostas:

7

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.

Senhor do Fogo
fonte
como eu disse, am stopuser 10estava mostrando apenas o pm list userscomando como usuário não executando. Eu verifiquei adb shell psdepois am stop-user 10e posso encontrar u10_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 o am 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.
Bharat G
O método que eu usei para instalar aplicativos (terminal) no segundo usuário do Android 5.0.2 é por adb install -r app.apk. Não sei se esse é o problema.
Bharat G
Vou atualizá-lo se receber algo relevante para seus comentários.
Firelord
11
Eu verifiquei o mesmo comando no dispositivo do amigo android-5.1.1e funcionou como indicado. Não verifiquei a parte do script, mas, ao emitir am stop-user 10, todos os processos do segundo usuário foram mortos e não estão listados no comando Settings > Appsou com ele ps. Portanto, é o caminho, mas android-5.0.2atualmente é um bug com este comando, ou essa funcionalidade não é implementada a partir dessa versão, eu acho. Mas o 5.1 tem bugs mais intoleráveis ​​para eu mudar ainda. Obrigado :)
Bharat G