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


29

Sto cercando il modo migliore / più amichevole per riavviare il mio dispositivo Android 4.1.1 con root. Finora ho trovato queste soluzioni:

  • su -c "reboot" - Causa problemi con il wifi dopo il riavvio sul mio dispositivo ... Ho letto che questo può causare un file system currupt in alcuni casi ... Non funziona tramite ssh per me.
  • toolbox reboot - Stesse preoccupazioni qui, ma funziona tramite ssh.
  • reboot -d 8 -f - causa problemi dopo il riavvio, ad esempio alcune app non si avviano
  • busybox killall system_server - "Hot Reboot" (non proprio un riavvio del sistema)
  • start|stop - Avvia / arresta Android Runtime (non proprio un riavvio del sistema)

Cosa sta facendo esattamente il dispositivo quando premo il pulsante di accensione (hardware)? Immagino sia il modo più amichevole.


su -c "reboot"esegue il rebootcomando, che è definito in reboot.c. reboot.cnon è cambiato molto nel corso degli anni. Ha sempre chiamato sync () e quindi riavviato il dispositivo. Inoltre, grazie a questo commit , le versioni moderne di reboot.csmontano anche tutti i filesystem. Android 4.1.1 include il commit che ho citato e quindi non vedo come su -c "reboot"su Android 4.1.1 possa mai causare la corruzione del filesystem.
indimenticabile il

Caro acy: la risposta tardiva di Firelord ( su -c 'am start -a android.intent.action.REBOOT') funziona per me su Android 4.1.2 e mi sembra la migliore delle risposte esistenti. Se funziona per te su Android 4.1.1 o se sei troppo occupato per provarlo, fai clic sul segno di spunta verde per farlo galleggiare nella parte superiore della sezione di risposta.
indimenticabile il

Risposte:


13

Semplice, davvero:

  • Android sta chiudendo in sicurezza 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, alle app e ai servizi viene data la possibilità di effettuare sistematicamente la loro pulizia.

I comandi che hai provato sono più severi. In realtà bypassano i meccanismi di sicurezza per un arresto aggraziato.

Android non è Linux di per sé, nel senso di una normale versione desktop di Linux in cui tali comandi potrebbero essere emessi per arrestare l'ambiente Linux.

Potrebbe essere possibile creare uno script wrapper come questo:

#!/system/bin/sh
am broadcast android.intent.action.ACTION_SHUTDOWN
sleep 5
reboot

Puoi salvarlo come safe_shutdown.sh, con autorizzazioni di 0755. Il tuo chilometraggio può variare, a seconda dei portatili e delle ROM, quindi non ci sono garanzie.


grazie per questa spiegazione! è possibile farlo da remoto, ad es. tramite ssh (non adb)?
acy,

4
Penso che voglia sapere come può imitare l'arresto del pulsante con un comando.
Flusso

se questo è il modo più amichevole / più sicuro / migliore per spegnere il dispositivo, allora sì :)
acy

@Flow adb reboot? Non sono sicuro che sia sicuro!?! Forse uno script wrapper attorno ad esso per inviare una trasmissione e ACTION_SHUTDOWNpoi chiamare adb reboot?
t0mm13b,

Non sei sicuro che la trasmissione ACTION_SHUTDOWNfarà anche quello che vuoi: "Le app normalmente non dovranno gestirlo, poiché anche l'attività in primo piano verrà messa in pausa." Sembra che la maggior parte delle app non la gestirà. La sospensione dell'attività è sufficiente?
Matteo Leggi il

12

Cosa sta facendo esattamente il dispositivo quando premo il pulsante di accensione (hardware)? Immagino sia il modo più amichevole.

Puoi vedere una finestra di dialogo con un'opzione per spegnere il dispositivo (Android di serie non offre il riavvio). Sembra che ShutdownActivity sia chiamato quando si tiene premuto a lungo il pulsante di accensione.

Ad ogni modo, questo è ciò che puoi provare, da remoto o localmente, ma solo con l'accesso root:

su -c 'am start -a android.intent.action.REBOOT'

Farà un arresto grazioso seguito dal riavvio. Stavo cercando un intento quando l'ho notato qui .

Metodo è testato su Android 4.2.1, 5.0.2 e 6.0.1 e dovrebbe funzionare per Android 4.1.1 pure

Aggiornare

Testato su Android 5.0 e 6.0.1 di serie:

su -c 'svc power reboot'

Secondo il codice sorgente qui , le build di KitKat dovrebbero supportare anche il comando.


1
Esattamente quello di cui avevo bisogno. Trovo ancora strano che dica "Spegnimento ..." quando ci sono valori per il riavvio del testo.
Sirene,

10
killall zygote

Ciò interromperà il zygoteprocesso di root e causerà un aggiornamento del sistema Android.

Questo non riavvia l'hardware del telefono, ma solo i processi Android.

Per impostazione predefinita (in Linux), i comandi kill/ killallforniscono ai processi un modo grazioso di chiudere, anche se dipende dall'implementazione di zigote se questo a sua volta arresta con grazia le tue app Android in esecuzione.

Nota: è necessario eseguirlo come root, sia che si utilizzi su -c, connettersi tramite SSH o ADB o un altro metodo.

Altri nomi per questa azione:

  • riavvio graduale
  • riavvio a caldo

Ho notato su alcuni dispositivi, il Wifi non si riconnetterà correttamente dopo questo comando (quindi devo disabilitare il Wifi, attendere un minuto e quindi riattivare nuovamente il Wifi).
Palswim,

2
Per i lettori: in Lollipop, il modo standard per riavviare il framework Android è am restart. Ciò richiede però l'accesso root.
Firelord

killall zygoteai processi un modo grazioso di chiudere? Domanda interessante. Qualcuno dovrebbe guardare il zygotecodice sorgente per sapere.
indimenticabile il
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.