Wie starte ich Android am besten über die Befehlszeile (aus der Ferne) neu?

29

Ich suche nach der besten / freundlichsten Möglichkeit, mein gerootetes Android 4.1.1-Gerät neu zu starten. Bisher habe ich folgende Lösungen gefunden:

  • su -c "reboot" - Verursacht Probleme mit WLAN nach dem Neustart auf meinem Gerät ... Ich habe gelesen, dass dies in einigen Fällen zu einem beschädigten Dateisystem führen kann ... Funktioniert bei mir nicht über ssh.
  • toolbox reboot - Gleiche Bedenken hier, funktioniert aber über ssh.
  • reboot -d 8 -f - verursacht Probleme nach dem Neustart, zB einige Apps starten nicht
  • busybox killall system_server - "Hot Reboot" (kein wirklicher Systemneustart)
  • start|stop - Startet / stoppt Android Runtime (kein wirklicher Systemneustart)

Was macht das Gerät genau, wenn ich den (Hardware-) Netzschalter drücke? Ich denke, das ist der freundlichste Weg.

acy
quelle
su -c "reboot"führt den rebootBefehl aus, der in definiert ist reboot.c. reboot.chat sich im Laufe der Jahre nicht viel verändert. Es hat immer sync () aufgerufen und das Gerät neu gestartet. Dank dieses Commits können moderne Versionen reboot.cauch alle Dateisysteme aushängen. Android 4.1.1 enthält das von mir erwähnte Commit. Daher sehe ich nicht, wie es su -c "reboot"bei Android 4.1.1 jemals zu einer Beschädigung des Dateisystems kommen kann.
unvergessliches
Sehr geehrte Damen und Herren, Firelords late answer ( su -c 'am start -a android.intent.action.REBOOT') funktioniert unter Android 4.1.2 und scheint mir die beste der vorhandenen Antworten zu sein. Wenn es unter Android 4.1.1 funktioniert oder Sie zu beschäftigt sind, um es zu testen, klicken Sie auf das grüne Häkchen, damit es oben im Antwortbereich angezeigt wird.
Unvergesslich

Antworten:

13

Ganz einfach:

  • Android fährt wichtige Teile der Laufzeit sicher herunter.
  • Das Betriebssystem überträgt auch die Absichten, Apps und Dienste anzuweisen, ordnungsgemäß zu schließen. Diese entleeren wiederum ihre Caches mit allen Daten und gemeinsamen Einstellungen und speichern das, was nicht in der SQLite-Datenbank gespeichert ist, und so weiter.

Mit anderen Worten, Apps und Dienste können systematisch bereinigt werden.

Die Befehle, die Sie ausprobiert haben, sind härter. Sie umgehen tatsächlich die Sicherheitsmechanismen für ein ordnungsgemäßes Herunterfahren.

Android ist nicht per se Linux im Sinne einer gewöhnlichen Desktop-Version von Linux, bei der diese Befehle zum Herunterfahren der Linux-Umgebung ausgegeben werden könnten.

Möglicherweise können Sie ein Wrapper-Skript wie das folgende erstellen:

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

Sie können dies safe_shutdown.shmit einer Berechtigung von 0755 als speichern. Ihre Laufleistung kann je nach Mobilteil und ROM variieren - daher gibt es keine Garantien.

t0mm13b
quelle
Danke für diese Erklärung! ist es möglich, dies aus der ferne zu tun, zb über ssh (nicht adb)?
Acy
4
Ich denke, er möchte wissen, wie er das Herunterfahren der Taste mit einem Befehl nachahmen kann.
Flow
Wenn dies der freundlichste / sicherste / beste Weg ist, das Gerät herunterzufahren, dann ja :)
acy
@Flow adb reboot? Ich bin nicht sicher, ob das sicher ist!?! Vielleicht ein Wrapper-Skript, um eine Sendung zu senden und ACTION_SHUTDOWNdann anzurufen adb reboot?
t0mm13b
Wir sind ACTION_SHUTDOWNuns nicht sicher, ob der Rundfunk das tut, was Sie möchten: "Apps müssen dies normalerweise nicht tun , da die Vordergrundaktivität ebenfalls angehalten wird." Klingt so, als würden die meisten Apps damit nicht umgehen. Ist es ausreichend, die Aktivität anzuhalten?
Matthew Read
12

Was macht das Gerät genau, wenn ich den (Hardware-) Netzschalter drücke? Ich denke, das ist der freundlichste Weg.

Es wird ein Dialogfeld mit der Option zum Ausschalten des Geräts angezeigt (Android bietet standardmäßig keinen Neustart an). Es scheint, dass ShutdownActivity aufgerufen wird, wenn Sie die Ein / Aus-Taste lang drücken.

Auf jeden Fall können Sie dies aus der Ferne oder lokal versuchen, jedoch nur mit Root-Zugriff:

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

Das System wird ordnungsgemäß heruntergefahren und anschließend neu gestartet. Ich suchte nach einer Absicht, als ich sie hier bemerkte .

Methode wird getestet auf Android 4.2.1, 5.0.2 und 6.0.1 und soll für Android 4.1.1 arbeiten und

Aktualisieren

Getestet auf Android 5.0 und 6.0.1:

su -c 'svc power reboot'

Gemäß dem hier angegebenen Quellcode sollten KitKat-Builds den Befehl ebenfalls unterstützen.

Feuerlord
quelle
1
Genau das, was ich brauchte. Ich finde es immer noch seltsam, dass dort "Ausschalten ..." steht, wenn es Werte für den Neustarttext gibt.
Sirenen
10
killall zygote

Dadurch wird der Root- zygoteProzess abgebrochen und das Android-System aktualisiert.

Dadurch wird nicht die Hardware Ihres Telefons neu gestartet, sondern nur die Android-Prozesse.

Standardmäßig (unter Linux) ermöglichen die Befehle kill/ das killallordnungsgemäße Herunterfahren der Prozesse, obwohl es von der zygote- Implementierung abhängt , ob dies wiederum das ordnungsgemäße Herunterfahren Ihrer ausgeführten Android-Apps bewirkt.

Hinweis: Sie müssen dies als root ausführen, unabhängig davon, ob Sie eine su -cVerbindung über SSH oder ADB oder eine andere Methode herstellen.

Andere Namen für diese Aktion:

  • weicher Neustart
  • heißer Neustart
Kumpelschwimmen
quelle
Ich habe festgestellt, dass bei einigen Geräten die WLAN-Verbindung nach diesem Befehl nicht ordnungsgemäß wiederhergestellt wird (daher muss ich das WLAN deaktivieren, eine Minute warten und dann das WLAN wieder aktivieren).
Palswim
2
Für Leser: In Lollipop ist die Standardmethode zum Neustarten des Android-Frameworks am restart. Dies erfordert jedoch Root-Zugriff.
Firelord
Gibt killall zygotees eine Möglichkeit, Prozesse ordnungsgemäß herunterzufahren? Interessante Frage. Jemand müsste sich den zygoteQuellcode ansehen, um es zu wissen.
Unvergessliche