Perché "riavvio adb" spegne il telefono molto più velocemente del solito prima che si riavvii? Salta passaggi importanti?


13

Possiedo un Samsung Galaxy S Relay 4G con Android 4.1.2. Inoltre, ho adb installato su un PC.

Quando premo a lungo il pulsante di accensione, quindi tocca "Riavvia", il mio telefono impiega circa dieci secondi per spegnersi. Quindi si riavvia da solo.

Quando adb rebootentro invece, il telefono si spegne molto più velocemente: l'arresto richiede solo un secondo circa. Quindi si riavvia.

Le mie domande:

  1. Perché è adb rebootmolto più veloce?

  2. Sta semplicemente saltando l'animazione di spegnimento dell'operatore di rete mobile o sta saltando anche alcune procedure più importanti?

  3. Posso usarlo adb rebootogni volta che voglio riavviare il telefono o c'è qualche svantaggio nel farlo?

  4. (Opzionale) Come lo sai?


Ulteriori informazioni (puoi saltare questo)

Ho fatto delle ricerche prima di pubblicare questa domanda. Ma non sono ancora illuminato. Lascia che ti mostri quello che ho scoperto.

Tetsuyuki Kobayashi di Kyoto Microcomputer Co. spiega nella diapositiva 8 di questa presentazione PDF che adb è composto da tre parti: un client, un server e un demone. Il client e il server funzionano su un PC. Il demone funziona su un telefono. Nella diapositiva 11, spiega che tutte e tre le parti sono costruite da una directory di origine. (È questa directory .)

Ho provato a cercare in quella directory sorgente la parolareboot e leggere parti di services.cpp , ma non sono ancora riuscito a capire cosa adb rebootfa effettivamente, o quali byte invia tramite il cavo o quale codice viene eseguito dal telefono quando viene riceve quei byte. Inoltre non ho capito la risposta a nessuna delle mie domande.


Correlati : "Qual è il modo migliore per riavviare Android dalla riga di comando (da remoto)?"


Sembra molto simile a quello che setprop sys.powerctl rebootfarebbe. Un arresto impuro seguito dalle istruzioni per riavviare.
Firelord

Risposte:


7

In base al platform/system/corerepository che hai collegato sopra, penso che la chiave sia dentro libcutils/android_reboot.c. E sono presenti importanti definizioni include/cutils/android_reboot.h; vale a dire:

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

Di solito nella normale modalità di riavvio (utilizzando il pulsante del dispositivo, ecc.), Il processo è più lungo perché (presumo) smonta la partizione, uccide tutte le applicazioni, chiude tutti i nodi fopen, come nel processo di spegnimento. La adb rebootpuò essere paragonato con comando reboot di Linux (da dove proviene): solo svuota il disco e immettere il riavvio senza processi primi uccidere o filesystem smontando. Vedo anche un comando di rimontaggio rapido emesso per mettere il disco (nel nostro caso parte del sistema di archiviazione del dispositivo) in modalità ro prima del riavvio.

Credo anche che il comando emesso kernel_restart()sia incorporato nel kernel. Vedi ad esempio http://www.phonesdevelopers.com/1730094/ . Controlla anche le machine_restartchiamate.


1
+1. Grazie mille! È sicuro che lo faccia adb rebootogni giorno anche se non eseguirà una procedura di spegnimento completo?
indimenticabileidSupportsMonica

Non fa male, ma potresti avere una buona ragione per farlo. Se desideri effettivamente cancellare alcuni dati memorizzati nella cache, esistono comunque altre soluzioni.
user3344236

Altre soluzioni come ...?
JohnyTex,

2

Altri utenti di Stack Exchange hanno già risposto a questa domanda nei post altrove.

t0mm13b scrive che, durante la visualizzazione dell'animazione di spegnimento del tuo operatore telefonico :

  • Android sta arrestando in modo sicuro parti vitali del runtime.
  • Il sistema operativo sta inoltre trasmettendo intenti per dire alle app e ai servizi di chiudere con grazia. Questi, a loro volta, svuotano la cache di tutti i dati e le preferenze condivise, salvano ciò che non è nel database sqlite, eccetera.

In altre parole, le app e i servizi hanno la possibilità di effettuare sistematicamente la loro pulizia.

[Comandi come adb reboot] sono più duri. In realtà bypassano i meccanismi di sicurezza per un arresto aggraziato.

Altrove, Yury offre un'altra spiegazione di ciò che Android fa durante un arresto regolare:

  • Arresta ActivityManager. Penso che chiudere ActivityManager significhi che tutte le attività passeranno il ciclo di vita necessario e, quindi, gli stati delle attività verranno memorizzati. Ma non sono sicuro. Non ho controllato.
  • Quindi, Android disattiva l'interfaccia della radio cellulare.
  • Successivamente, disattiva il Bluetooth.
  • Infine, prova a chiudere MountService.

adb reboot è più veloce perché salta alcune o tutte le precedenti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.