Estou procurando a melhor / mais amigável maneira de reiniciar o meu dispositivo Android 4.1.1 enraizado. Encontrei essas soluções até agora:
su -c "reboot"
- Causa problemas com o wifi após reiniciar no meu dispositivo ... Eu li que isso pode causar um sistema de arquivos danificado em alguns casos ... Não funciona via ssh para mim.toolbox reboot
- Mesmas preocupações aqui, mas funciona via ssh.reboot -d 8 -f
- causa problemas após a reinicialização, por exemplo, alguns aplicativos não iniciambusybox killall system_server
- "Hot Reboot" (não é realmente uma reinicialização do sistema)start|stop
- Inicia / pára o Android Runtime (não é realmente uma reinicialização do sistema)
O que o dispositivo está fazendo exatamente quando pressiono o botão liga / desliga (hardware)? Eu acho que é a maneira mais amigável.
su -c "reboot"
executa oreboot
comando, definido emreboot.c
.reboot.c
não mudou muito ao longo dos anos. Ele sempre chamou sync () e, em seguida, reiniciou o dispositivo. Além disso, graças a esse commit , as versões modernasreboot.c
também desmontam todos os sistemas de arquivos. O Android 4.1.1 inclui o commit que eu mencionei e, portanto, não vejo como osu -c "reboot"
Android 4.1.1 poderia causar corrupção no sistema de arquivos.su -c 'am start -a android.intent.action.REBOOT'
) funciona para mim no Android 4.1.2 e me parece a melhor das respostas existentes. Se funcionar para você no Android 4.1.1 ou se você estiver ocupado demais para experimentá-lo, clique na marca de seleção verde para fazê-lo flutuar na parte superior da seção de respostas.Respostas:
Simples, realmente:
Em outras palavras, aplicativos e serviços têm a chance de fazer sua limpeza sistematicamente.
Os comandos que você tentou são mais severos. Eles realmente ignoram os mecanismos de segurança para um desligamento normal.
O Android não é o Linux propriamente dito, no sentido de uma versão desktop comum do Linux, na qual esses comandos podem ser emitidos para desligar o ambiente Linux.
Pode ser possível criar um script de wrapper como este:
Você pode salvar isso como
safe_shutdown.sh
, com permissões de 0755. Sua milhagem pode variar, dependendo de aparelhos e ROMs - portanto, não há garantias.fonte
adb reboot
? Não tenho certeza se isso é seguro!?! Talvez um script wrapper para enviar uma transmissão eACTION_SHUTDOWN
depois ligaradb reboot
?ACTION_SHUTDOWN
faça o que você deseja: "Normalmente, os aplicativos não precisam lidar com isso, pois a atividade em primeiro plano também será pausada". Parece que a maioria dos aplicativos, portanto , não vai lidar com isso. Pausar a atividade é suficiente?Você verá uma caixa de diálogo com uma opção para desligar o dispositivo (o Android padrão não oferece reinicialização). Parece que a ShutdownActivity é chamada quando você pressiona o botão Liga / Desliga.
De qualquer forma, é isso que você pode tentar, remotamente ou localmente, mas apenas com acesso root:
Ele fará um desligamento normal seguido pela reinicialização. Eu estava procurando por uma intenção quando a notei aqui .
Método é testado em Android 4.2.1, 5.0.2 e 6.0.1 e deve trabalhar para Android 4.1.1 , bem
Atualizar
Testado em estoque Android 5.0 e 6.0.1:
De acordo com o código-fonte aqui , as compilações do KitKat também devem suportar o comando.
fonte
Isso interromperá o
zygote
processo raiz e causará uma atualização do sistema Android.Isso não reinicia o hardware do seu telefone, apenas o Android processa.
Por padrão (no Linux), os comandos
kill
/killall
fornecem aos processos uma maneira fácil de desligar, embora dependa da implementação do zygote se isso, por sua vez, encerra normalmente seus aplicativos Android em execução.Nota: você deve executá-lo como root, independentemente de usar
su -c
, conectar-se via SSH ou ADB ou outro método.Outros nomes para esta ação:
fonte
am restart
. Isso requer acesso root, no entanto.killall zygote
aos processos uma maneira elegante de desligar? Pergunta interessante. Alguém teria que olhar ozygote
código fonte para saber.