Pourquoi «adb reboot» arrête-t-il mon téléphone beaucoup plus rapidement que d'habitude avant de redémarrer? Ignore-t-il des étapes importantes?

13

Je possède un Samsung Galaxy S Relay 4G fonctionnant sous Android 4.1.2. De plus, j'ai installé adb sur un PC.

Lorsque j'appuie longuement sur le bouton d'alimentation, puis sur "Redémarrer", mon téléphone prend environ dix secondes pour s'éteindre. Ensuite, il redémarre.

Lorsque j'entre à la adb rebootplace, le téléphone s'éteint beaucoup plus rapidement: l'arrêt ne prend qu'une seconde environ. Ensuite, il redémarre.

Mes questions:

  1. Pourquoi est-ce adb reboottellement plus rapide?

  2. Ignore-t-elle simplement l'animation d'arrêt de l'opérateur de réseau mobile ou ignore-t-elle également des procédures plus importantes?

  3. Puis-je utiliser adb rebootchaque fois que je veux redémarrer le téléphone, ou y a-t-il un inconvénient à le faire?

  4. (Facultatif) Comment le savez-vous?


Plus d'informations (vous pouvez ignorer cela)

J'ai fait quelques recherches avant de poster cette question. Mais je ne suis toujours pas éclairé. Permettez - moi de vous montrer ce que je ne découvre.

Tetsuyuki Kobayashi de Kyoto Microcomputer Co. explique dans la diapositive 8 de ce diaporama PDF que adb se compose de trois parties: un client, un serveur et un démon. Le client et le serveur s'exécutent sur un PC. Le démon s'exécute sur un téléphone. Dans la diapositive 11, il explique que les trois parties sont construites à partir d'un répertoire source. (C'est ce répertoire .)

J'ai essayé de rechercher dans le répertoire source le motreboot et de lire des parties de services.cpp , mais je n'ai toujours pas été en mesure de comprendre ce qui adb rebootse passe réellement, ou quels octets il envoie sur le fil, ou quel code le téléphone exécute quand il reçoit ces octets. Je n'ai également trouvé la réponse à aucune de mes questions.


Connexes : "Quelle est la meilleure façon de redémarrer Android via la ligne de commande (à distance)?"

inoubliableidSupportsMonica
la source
Semble très similaire à ce setprop sys.powerctl rebootqui ferait. Un arrêt impur suivi de l'instruction de redémarrer.
Firelord

Réponses:

7

Sur la base du platform/system/coreréférentiel que vous avez lié ci-dessus, je pense que la clé est là libcutils/android_reboot.c. Et des définitions importantes sontinclude/cutils/android_reboot.h ; à savoir:

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

Habituellement, en mode de redémarrage normal (en utilisant le bouton de l'appareil, etc.), le processus est plus long car (je suppose) il démonte la partition, tue toutes les applications, ferme tous les nœuds fopen, comme dans le processus d'arrêt. La commande adb rebootpeut être comparée à la commande de redémarrage Linux (d'où elle vient): elle vide simplement le disque et entre dans le redémarrage sans d'abord tuer les processus ou démonter les systèmes de fichiers. Je vois également une commande de remontage rapide émise pour mettre le disque (dans notre cas, la partie de stockage du périphérique du système) en mode ro avant le redémarrage.

Je crois également que la commande émise kernel_restart()est intégrée au noyau. Voir par exemple http://www.phonesdevelopers.com/1730094/ . Vérifiez également les machine_restartappels.

user3344236
la source
1
+1. Merci beaucoup! Est-il sûr pour moi de le faire adb reboottous les jours, même s'il n'effectue pas une procédure d'arrêt complet?
inoubliableidSupportsMonica
Cela ne fait pas de mal, mais vous avez peut-être une bonne raison de le faire. Si vous souhaitez réellement effacer certaines données mises en cache, il existe de toute façon d'autres solutions.
user3344236
D'autres solutions telles que ...?
JohnyTex
2

D'autres utilisateurs de Stack Exchange ont déjà répondu à cette question dans des articles ailleurs.

t0mm13b écrit que, lors de l'affichage de l'animation d'arrêt de votre opérateur:

  • Android arrête en toute sécurité les parties vitales de l'exécution.
  • L'OS diffuse également des intentions pour dire aux applications et aux services de se fermer avec élégance. Celles-ci, à leur tour, vident leurs caches de toutes les données et préférences partagées, enregistrent les autres éléments dans la base de données sqlite, et cetera.

En d'autres termes, les applications et les services ont la possibilité de faire leur nettoyage systématiquement.

[Les commandes telles que adb reboot] sont plus dures. Ils contournent en fait les mécanismes de sécurité pour un arrêt gracieux.

Ailleurs, Yury offre une autre explication de ce que fait Android lors d'un arrêt gracieux:

  • Il arrête ActivityManager. Je pense qu'arrêter ActivityManager signifie que toutes les activités passeront le cycle de vie nécessaire et, par conséquent, les états des activités seront stockés. Mais je ne suis pas sur. Je n'ai pas vérifié.
  • Ensuite, Android désactive l'interface radio cellulaire.
  • Après cela, il désactive le Bluetooth.
  • Enfin, il essaie de fermer MountService.

adb reboot est plus rapide car il ignore tout ou partie de ce qui précède.

inoubliablesid
la source