Warum fährt „adb reboot“ mein Telefon vor dem Neustart so viel schneller herunter als gewöhnlich? Überspringt es wichtige Schritte?

13

Ich besitze ein Samsung Galaxy S Relay 4G mit Android 4.1.2. Außerdem habe ich adb auf einem PC installiert.

Wenn ich den Ein- / Ausschalter lange drücke und dann auf "Neu starten" tippe, dauert das Herunterfahren meines Telefons etwa zehn Sekunden. Dann startet es sich neu.

Wenn ich adb rebootstattdessen eintrete , wird das Telefon viel schneller heruntergefahren: Das Herunterfahren dauert nur etwa eine Sekunde. Dann wird es neu gestartet.

Meine Fragen:

  1. Warum ist adb rebootso viel schneller?

  2. Überspringt es einfach die Animation zum Herunterfahren des Mobilfunknetzbetreibers oder werden auch einige wichtigere Vorgänge übersprungen?

  3. Kann ich adb rebootjedes Mal verwenden, wenn ich das Telefon neu starten möchte, oder hat dies einen Nachteil?

  4. (Optional) Woher wissen Sie das?


Weitere Informationen (Sie können dies überspringen)

Ich habe einige Nachforschungen angestellt, bevor ich diese Frage gestellt habe. Aber ich bin immer noch nicht aufgeklärt. Lassen Sie mich Ihnen zeigen , was ich habe zu entdecken.

Tetsuyuki Kobayashi von Kyoto Microcomputer Co. erklärt in Folie 8 dieser PDF-Diashow, dass adb aus drei Teilen besteht: einem Client, einem Server und einem Daemon. Der Client und der Server laufen auf einem PC. Der Daemon läuft auf einem Telefon. In Folie 11 erklärt er, dass alle drei Teile aus einem Quellverzeichnis bestehen. (Es ist dieses Verzeichnis .)

Ich habe versucht , in diesem Quellverzeichnis nach dem Wort zu suchenreboot und Teile von services.cpp zu lesen , aber ich konnte immer noch nicht herausfinden, was adb reboottatsächlich funktioniert, welche Bytes es über die Leitung sendet oder welchen Code das Telefon ausführt, wenn es ausgeführt wird empfängt diese Bytes. Ich habe auch keine Antwort auf meine Fragen gefunden.


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

unvergesslichidUnterstütztMonica
quelle
Scheint sehr ähnlich zu sein, was setprop sys.powerctl reboottun würde. Ein unsauberes Herunterfahren, gefolgt von der Anweisung, einen Neustart durchzuführen.
Firelord

Antworten:

7

Basierend auf dem platform/system/coreRepository, das Sie oben verlinkt haben, glaube ich, dass sich der Schlüssel in befindet libcutils/android_reboot.c. Und wichtige Definitionen sind in include/cutils/android_reboot.h; nämlich:

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

Normalerweise dauert der Vorgang im normalen Neustartmodus (über die Gerätetaste usw.) länger, da (ich nehme an) die Partition nicht gemountet, alle Anwendungen beendet und alle offenen Knoten geschlossen werden, wie beim Herunterfahren. Das adb rebootkann mit dem Linux-Neustartbefehl verglichen werden (von wo es kommt): Es leert nur die Festplatte und startet den Neustart, ohne zuvor Prozesse zu beenden oder Dateisysteme abzuhängen. Ich sehe auch einen schnellen Remount-Befehl, der ausgegeben wird, um die Festplatte (in unserem Fall den Speicherteil des Systems) vor dem Neustart in den Ro-Modus zu versetzen.

Ich glaube auch, dass der ausgegebene Befehl kernel_restart()im Kernel eingebettet ist. Siehe zum Beispiel http://www.phonesdevelopers.com/1730094/ . Überprüfen Sie auch machine_restartAnrufe.

user3344236
quelle
1
+1. Vielen Dank! Ist es für mich sicher, adb rebootjeden Tag etwas zu tun, auch wenn es nicht vollständig heruntergefahren werden kann?
unvergesslicheidSupportsMonica
Es tut nicht weh, aber Sie haben vielleicht einen guten Grund, dies zu tun. Wenn Sie tatsächlich einige zwischengespeicherte Daten löschen möchten, gibt es trotzdem andere Lösungen.
user3344236
Andere Lösungen wie ...?
JohnyTex
2

Andere Stack Exchange-Benutzer haben diese Frage bereits in anderen Posts beantwortet.

t0mm13b schreibt Folgendes , während die Animation zum Herunterfahren Ihres Netzbetreibers angezeigt wird :

  • Android fährt wichtige Teile der Laufzeit sicher herunter.
  • Das Betriebssystem sendet auch Absichten, Apps und Dienste anzuweisen, ordnungsgemäß zu schließen. Diese leeren wiederum ihre Caches mit allen Daten und gemeinsam genutzten Einstellungen und speichern die Notizen in der SQLite-Datenbank und so weiter.

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

[Befehle wie adb reboot] sind härter. Sie umgehen tatsächlich die Sicherheitsmechanismen für ein ordnungsgemäßes Herunterfahren.

An anderer Stelle bietet Yury eine weitere Erklärung, was Android während eines ordnungsgemäßen Herunterfahrens tut:

  • Es fährt ActivityManager herunter. Ich denke, das Herunterfahren von ActivityManager bedeutet, dass alle Aktivitäten den erforderlichen Lebenszyklus durchlaufen und somit die Zustände der Aktivitäten gespeichert werden. Aber ich bin mir nicht sicher. Ich habe nicht nachgesehen.
  • Dann schaltet Android die Mobilfunkschnittstelle aus.
  • Danach wird Bluetooth ausgeschaltet.
  • Schließlich wird versucht, MountService herunterzufahren.

adb reboot ist schneller, weil einige oder alle der oben genannten übersprungen werden.

unvergesslich
quelle