Por que o “adb reboot” desliga meu telefone muito mais rápido do que o normal antes de reiniciar? Está pulando etapas importantes?

13

Eu possuo um Samsung Galaxy S Relay 4G executando o Android 4.1.2. Além disso, tenho adb instalado em um PC.

Quando pressiono o botão Liga / Desliga e toque em "Reiniciar", meu telefone leva cerca de dez segundos para desligar. Então ele se reinicia.

Quando entro adb reboot, o telefone é desligado muito mais rápido: o desligamento leva apenas um segundo. Então ele é reiniciado.

Minhas perguntas:

  1. Por que é adb rebootmuito mais rápido?

  2. É simplesmente pular a animação de desligamento da operadora de rede móvel ou também pular alguns procedimentos mais importantes?

  3. Posso usar adb rebootsempre que quiser reiniciar o telefone ou há alguma desvantagem em fazer isso?

  4. (Opcional) Como você sabe?


Mais informações (você pode pular isso)

Eu fiz algumas pesquisas antes de postar esta pergunta. Mas ainda não sou iluminado. Deixe-me mostrar o que eu queria descobrir.

Tetsuyuki Kobayashi, da Kyoto Microcomputer Co., explica no slide 8 desta apresentação de slides em PDF que o adb consiste em três partes: um cliente, um servidor e um daemon. O cliente e o servidor são executados em um PC. O daemon é executado em um telefone. No slide 11, ele explica que as três partes são criadas a partir de um diretório de origem. (É este diretório .)

Tentei pesquisar no diretório de origem a palavrareboot e ler partes dos services.cpp , mas ainda não consegui descobrir o que adb rebootrealmente faz, ou quais bytes ele envia por fio, ou qual código o telefone executa quando ele é executado. recebe esses bytes. Também não descobri a resposta para nenhuma das minhas perguntas.


Relacionado : "Qual é a melhor maneira de reiniciar o Android via linha de comando (remotamente)?"

inesquecívelidSuporteMonica
fonte
Parece muito semelhante ao que setprop sys.powerctl rebootfaria. Um desligamento imundo seguido pela instrução para reiniciar novamente.
Firelord

Respostas:

7

Com base no platform/system/corerepositório que você vinculou acima, acho que está a chave libcutils/android_reboot.c. E definições importantes estão em include/cutils/android_reboot.h; nomeadamente:

    /* Commands */
    #define ANDROID_RB_RESTART  0xDEAD0001
    #define ANDROID_RB_POWEROFF 0xDEAD0002
    #define ANDROID_RB_RESTART2 0xDEAD0003

Normalmente, no modo de reinicialização normal (usando o botão do dispositivo, etc.), o processo é mais longo porque (presumo) desmontar partições, matar todos os aplicativos, fechar todos os nós abertos, como no processo de desligamento. Ele adb rebootpode ser comparado ao comando de reinicialização do Linux (de onde vem): ele apenas libera o disco e entra na reinicialização sem primeiro interromper os processos ou desmontar os sistemas de arquivos. Também vejo um comando de remontagem rápida emitido para colocar o disco (no nosso caso, parte do sistema de armazenamento) no modo ro antes da reinicialização.

Eu também acredito que o comando emitido é o kernel_restart()que está incorporado no kernel. Veja, por exemplo, http://www.phonesdevelopers.com/1730094/ . Verifique também as machine_restartchamadas.

user3344236
fonte
1
+1. Muito obrigado! É seguro para mim fazer adb reboottodos os dias, mesmo que não faça um procedimento de desligamento completo?
IngettableidSupportsMonica
Não dói, mas você pode ter um bom motivo para fazê-lo. Se você realmente deseja limpar alguns dados em cache, existem outras soluções.
User3344236 de
Outras soluções como ...?
precisa saber é o seguinte
2

Outros usuários do Stack Exchange já responderam a essa pergunta em postagens em outros lugares.

O t0mm13b escreve que, enquanto exibe a animação de desligamento da sua operadora:

  • O Android está desligando com segurança partes vitais do tempo de execução.
  • O sistema operacional também está transmitindo intenções de dizer aos aplicativos e serviços para fechar normalmente. Estes, por sua vez, descarregam seus caches de todos os dados e preferências compartilhadas, salvam o que não é do banco de dados sqlite, etc.

Em outras palavras, aplicativos e serviços têm a chance de fazer sua limpeza sistematicamente.

[Comandos como adb reboot] são mais severos. Eles realmente ignoram os mecanismos de segurança para um desligamento normal.

Em outros lugares, Yury oferece outra explicação sobre o que o Android faz durante um desligamento normal:

  • Ele desliga o ActivityManager. Acho que desligar o ActivityManager significa que todas as atividades passarão no ciclo de vida necessário e, assim, os estados das atividades serão armazenados. Mas eu não tenho certeza. Eu não verifiquei.
  • Então, o Android desliga a interface de rádio celular.
  • Depois disso, ele desliga o Bluetooth.
  • Por fim, ele tenta desligar o MountService.

adb reboot é mais rápido porque ignora algumas ou todas as opções acima.

inesquecíveis
fonte