16 votes

Pourquoi "adb reboot" éteint-il mon téléphone plus rapidement que d'habitude avant qu'il ne redémarre ? Est-ce qu'il saute des étapes importantes ?

Je possède un Samsung Galaxy S Relay 4G fonctionnant sous Android 4.1.2. J'ai également adb installé sur un PC.

Lorsque j'appuie longuement sur le bouton d'alimentation, puis sur "Redémarrer", mon téléphone met environ dix secondes à s'éteindre. Puis il redémarre tout seul.

Quand j'entre adb reboot Au lieu de cela, le téléphone s'éteint beaucoup plus rapidement : l'arrêt ne prend qu'une seconde environ. Puis il redémarre.

Mes questions :

  1. Pourquoi est-ce que adb reboot tellement plus rapide ?

  2. Saute-t-il simplement l'animation d'arrêt de l'opérateur de réseau mobile, ou saute-t-il également des procédures plus importantes ?

  3. Puis-je utiliser adb reboot à chaque 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 sauter cette étape)

J'ai fait quelques recherches avant de poster cette question. Mais je ne suis toujours pas éclairé. Laissez-moi vous montrer ce que j'ai <em>a fait </em>découvrir.

Tetsuyuki Kobayashi de Kyoto Microcomputer Co. explique dans la diapositive 8 de <a href="https://android.stackexchange.comandroid.stackexchange.com//events.linuxfoundation.org/images/stories/pdf/lf_abs12_kobayashi.pdf" rel="nofollow noreferrer">ce diaporama en PDF </a>que adb se compose de trois parties : un client, un serveur et un démon. Le client et le serveur fonctionnent sur un PC. Le démon fonctionne sur un téléphone. Dans la diapositive 11, il explique que ces trois parties sont construites à partir d'un seul répertoire source. (Il s'agit de <a href="https://android.stackexchange.comandroid.stackexchange.com//github.com/android/platform_system_core/tree/master/adb" rel="nofollow noreferrer">ce répertoire </a>.)

J'ai essayé <a href="https://android.stackexchange.comandroid.stackexchange.com//github.com/android/platform_system_core/search?q=reboot+path%3A%2Fadb&amp;type=Code" rel="nofollow noreferrer">en recherchant dans ce répertoire source le mot <code>reboot</code></a> et lire des parties de <a href="https://android.stackexchange.comandroid.stackexchange.com//github.com/android/platform_system_core/blob/master/adb/services.cpp" rel="nofollow noreferrer">services.cpp </a>mais je n'ai toujours pas réussi à comprendre ce que <code>adb reboot</code> fait 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 pas non plus trouvé la réponse à aucune de mes questions.


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

0 votes

Cela semble très similaire à ce que setprop sys.powerctl reboot ferait. Une fermeture impure suivi de l'instruction de redémarrer.

8voto

ares777 Points 531

Sur la base de la platform/system/core que tu as mis en lien ci-dessus, je pense que la clé est dans libcutils/android_reboot.c . Et des définitions importantes sont dans include/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 du périphérique, etc.), le processus est plus long parce que (je suppose) il umount partition, kill all applications, close all fopen nodes, as in shutdown process. Le site adb reboot peut être comparée à la commande de redémarrage de Linux (d'où elle vient) : elle se contente de vider le disque et de lancer le redémarrage sans tuer les processus ou démonter les systèmes de fichiers. Je vois aussi une commande de remontage rapide émise pour mettre le disque (dans notre cas, la partie stockage du système) en mode ro avant le redémarrage.

Je crois aussi que la commande émise est kernel_restart() qui est intégré dans le noyau. Voir par exemple http://www.phonesdevelopers.com/1730094/ . Vérifiez également machine_restart appels.

1 votes

+1. Merci beaucoup ! Est-il sûr pour moi de faire adb reboot tous les jours, même s'il n'effectue pas une procédure d'arrêt complète ?

0 votes

Ça ne fait pas mal, mais vous avez peut-être une bonne raison de le faire. Si vous souhaitez réellement effacer des données en cache, il existe de toute façon d'autres solutions.

0 votes

D'autres solutions telles que... ?

3voto

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

t0mm13b écrit cela, tout en affichant l'animation d'arrêt de votre opérateur :

  • Android arrête en toute sécurité les parties vitales du runtime.
  • Le système d'exploitation diffuse également des intentions pour indiquer aux applications et aux services qu'ils doivent se fermer en douceur. Ceux-ci, à leur tour, vident leurs caches de toutes les données et préférences partagées, sauvegardent tout cela dans la base de données sqlite, et ainsi de suite.

En d'autres termes, les applications et les services ont la possibilité d'effectuer leur nettoyage de manière systématique.

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

Ailleurs, Yury propose une autre explication de ce que fait Android pendant un arrêt en douceur :

  • Il ferme ActivityManager. Je pense que la fermeture de ActivityManager signifie que toutes les activités passeront le cycle de vie nécessaire et que, par conséquent, les états des activités seront stockés. Mais je ne suis pas sûr. 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 d'arrêter MountService.

adb reboot est plus rapide parce qu'elle ignore tout ou partie de ce qui précède.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X