9 votes

Pourquoi le démarrage d'Android est-il relativement lent ?

Cette question me préoccupe (et peut-être beaucoup d'autres) car mon téléphone n'a pas de partie tournante.

Mon téléphone est doté d'un quadruple cœur, de 3 Go de RAM et d'un espace de stockage considérable, de type SSD, avec des vitesses de lecture et d'écriture incroyables.

Avec tout cela, Android (à la fois Android 4.4 (KitKat) et Android 5.0 (Lollipop)) prend environ 80 secondes pour démarrer. Il en faut beaucoup moins sur Ubuntu avec systemd o Upstart . (Certains utilisateurs rapportent un temps de démarrage inférieur à 10 secondes en utilisant Ubuntu avec systemd et environ 20 secondes en utilisant Upstart, avec des spécifications comme Intel Core i5 et une mémoire vive de 8 Go).

Alors, qu'est-ce qui rend le démarrage d'Android si lent ? Et y a-t-il quelque chose que je puisse faire, en tant qu'utilisateur, pour accélérer le processus de démarrage ?

Selon le processus de démarrage expliqué ( Quel est le processus de démarrage d'un appareil Android ? ), il ne semble pas y avoir de grandes différences dans le processus de démarrage global par rapport à un système d'exploitation conventionnel comme Ubuntu. Où Android se trompe-t-il dans ce processus ?

0 votes

De nombreuses personnes utilisent Xposed pour faire le travail. Je suppose qu'il vous faut chercher sur Google. Peut-être que quelqu'un d'autre peut les mentionner.

0 votes

@Firelord Je n'utilise qu'une seule ROM. Les deux, bien que fonctionnant sur ordinateur de bureau et sur téléphone, dépendent d'un noyau similaire, voire semblable (simplement compilé pour des architectures différentes). J'utilise actuellement la version 5.1.1. Je l'utilise depuis la 4.0 et la vitesse de démarrage n'a jamais augmenté. Même avec une vitesse de démarrage fraîchement installée comparée à celle de mes applications complètes chargées, il n'y a pas de différence de temps significative. En utilisant le démarrage automatique, quelle est la vitesse de démarrage de votre téléphone ? Au fait, je suis sur un xperia z2.

0 votes

Xposed ne fonctionne pas sur les téléphones non rootés, si j'ai bien compris ?

11voto

AADAndroidEnthusiasts Points 2291

Il y a quelques années, j'ai travaillé sur l'optimisation du temps de démarrage d'Android, en tant que développeur Android. Évidemment, dans le cadre de ce travail, nous devions d'abord analyser où Android passe du temps pendant le démarrage.

Vous trouverez ci-dessous les brèves conclusions :

Matériel utilisé : OMAP3430 Board qui est comme une carte de développement sur laquelle le Stock Android est flashé. Sur un appareil commercial ou de production réel, il y aura du matériel spécifique supplémentaire. Pour visualiser le temps de démarrage, nous avons utilisé un outil de développement appelé bootchart

El le plus de temps passé par Android est dans les 2 domaines suivants :

  1. Processus zygote . Lorsque le système d'exploitation Android est lancé, il démarre le processus Zygote, qui précharge les classes pour créer une zone de mémoire partagée pour les applications. une zone de mémoire partagée pour les applications. Ce travail de préchargement des classes java prend 23 secondes pour son achèvement.

Pourquoi ? Parce que le préchargement de la classe zygote est essentiel pour le bon fonctionnement du système après le démarrage. Ainsi, une fois que les classes de toutes les applications sont chargées, l'exécution de l'application est beaucoup plus rapide.

  1. Service de gestion des paquets. Dans la sortie de logcat, nous pouvons voir que le gestionnaire de paquets scanne 4 répertoires. /system/app , /system/framework , /data/app , /data/app-private .

Ensuite, il y a un composant appelé Activity Manager qui démarre différents services tels que le service de localisation, le service de téléphonie, etc. Et cela prend presque 11-12 sec pour finir ça.

Pourquoi ? Parce que, en théorie, l'analyse des paquets peut mettre en cache ses résultats après le premier démarrage et peut vérifier les vulnérabilités de sécurité.

Si vous additionnez ces 2 temps, cela fait environ 35 secondes

Vous pouvez ignorer ces chiffres à notre époque, mais le point que ces chiffres indiquent est l'endroit où le code AOSP d'Android passe du temps pendant le démarrage. Les OEM ont leur propre ensemble de matériel qui varie d'un appareil à l'autre.

Bien sûr, il existe d'autres initialisations matérielles et logicielles qu'Android doit effectuer après ces deux étapes fastidieuses, ce qui peut allonger encore le temps de démarrage.

Et y a-t-il quelque chose que je puisse faire en tant qu'utilisateur pour accélérer le démarrage ? de démarrage ?

Pas grand-chose, je suppose. La communauté des développeurs Android et les équipementiers s'efforcent toujours d'accélérer le temps de démarrage, mais comme vous pouvez l'imaginer, ce n'est pas si facile et les changements apportés pour optimiser le temps de démarrage peuvent finir par augmenter le temps de chargement des applications pendant les opérations normales, comme l'a laissé entendre Ingénieur cadre Android .

0 votes

Pourquoi l'image du processus zygote n'est-elle pas mise en cache comme le font toutes les bonnes VM (comme smalltalk et lisp) ? Pourquoi l'interface graphique d'Android ne peut-elle pas être mise en place avant que l'API de téléphonie ne soit prête ? Pourquoi tout cela est-il séquentiel ? POURQUOI UTILISONS-NOUS ENCORE JAVA ? Il n'y a aucune raison pour que le temps de démarrage d'Android soit plus lent que le temps de démarrage d'un C64, c'est à dire 1 seconde.

4voto

Shamik Points 1780

Le démarrage d'Android est lent ?

Mon téléphone a un Quad Core, 3 Gig de RAM ... Android (KitKat et Lollipop) prend environ 80 secondes pour démarrer.

Mon téléphone n'est qu'un dual core avec 1G de RAM (Zenfone 4) et je n'ai jamais eu ce problème. Démarrage à froid en ~60 secondes, redémarrage en 40 environ (CyannogenMod 12.1).

certains utilisateurs rapportent un temps de démarrage de moins de 10 secondes en utilisant Ubuntu avec systemd et d'autres 20 secondes ...

Cela dépend de la configuration et de ce que vous avez considéré "temps de démarrage" . Mon ordinateur portable (i5 1ère génération, 4 Go de RAM avec disque rotatif) est considéré comme utilisable (ayant fini de démarrer) après environ 90 secondes. Bien sûr, je peux retarder/désactiver certains des services pour obtenir un temps de démarrage plus rapide et les démarrer manuellement si nécessaire. Mais de mon point de vue, basé sur ma préférence, cela ne compte pas comme utilisable .

Sur le PC et le mobile

Il y a un peu de différences à prendre en compte lors de la comparaison entre linux PC et linux mobile. de CPU jusqu'à la Noyau . Les différences les plus notables :

  • En raison de la nature de l'appareil, l'unité centrale mobile principalement conçu avec la conservation de l'énergie comme principale considération. Cela affecte grandement les performances.
  • Les noyaux Android ont fonctions spécifiques aux mobiles dont mai affectent le temps de démarrage et l'accès aux entrées/sorties du matériel.
  • De plus, le noyau Android est connu pour avoir des problèmes de compatibilité avec mainline/stable. Cela est principalement dû à la préférence des fournisseurs de s'en tenir à l'ancienne version du noyau qui est compatible avec les pilotes de leurs appareils. AOSP Marshmallow fonctionne 3.18.10 alors que le noyau stable est actuellement à 4.6.2 .

Alors, qu'est-ce qui rend le démarrage d'Android si lent ?

Pourquoi ne pas vérifier ? :)

Si vous avez accès à adb et permettent déjà Options pour les développeurs Vérifiez le journal de démarrage en utilisant

adb logcat -d -b events -v threadtime | grep "boot"

sur mon appareil, voici le résultat :

bambang@pamungkas ~ % adb logcat -d -b events -v threadtime | grep "boot"
06-08 04:35:01.417   193   193 I boot_progress_start: 9906
06-08 04:35:03.718   193   193 I boot_progress_preload_start: 12208
06-08 04:35:07.838   193   193 I boot_progress_preload_end: 16328
06-08 04:35:08.158   513   513 I boot_progress_system_run: 16647
06-08 04:35:09.880   513   513 I boot_progress_pms_start: 18370
06-08 04:35:10.204   513   513 I boot_progress_pms_system_scan_start: 18693
06-08 04:35:24.487   513   513 I boot_progress_pms_data_scan_start: 32977
06-08 04:35:28.552   513   513 I boot_progress_pms_scan_end: 37042
06-08 04:35:28.696   513   513 I boot_progress_pms_ready: 37186
06-08 04:35:33.088   513   513 I boot_progress_ams_ready: 41578
06-08 04:35:40.755   513   533 I boot_progress_enable_screen: 49244

Comme vous pouvez le voir, le temps total de démarrage du démarrage de la VM jusqu'au dessin initial de l'écran par le gestionnaire de fenêtres est de ~40 secondes. Le temps supplémentaire sur le firmware et l'espace noyau (sur votre asnwer lié, cela se traduit par les étapes 1-4) n'est pas inclus.

Notez qu'il faut ~18 secondes pour traiter l'ensemble des données du système. apk ( boot_progress_pms_* ), cela se traduit par ~45% du temps de démarrage, qui comprend :

  • nettoyage des paquets système inexistants et installation incomplète des paquets,
  • la validation des applications installées,
  • paramétrage du chemin de la bibliothèque,
  • etc (voir : le code source complet de PackageManagerService )

Donc, en général, le temps de démarrage total dépend du nombre de paquets (app) installés sur l'appareil. Plus il y a d'applications, plus l'attente est longue pendant le processus de pms. De plus, le démarrage des activités prend ~5 sec / 20% du temps de démarrage. Le reste n'est ni significatif ni modifiable sans une connaissance approfondie du comportement du système.

Y a-t-il quelque chose que je puisse faire pour accélérer le processus de démarrage ?

  • Essayez une autre ROM. Sony est l'un des "bons gars" qui fournissent un environnement sain pour les tweakers. Je recommande AOSP o Cyanogen . Soyez juste conscient de la limitations
  • Testez, ne supposez pas ! Il est facile de faire des suppositions qui A démarrage lent, B est plus rapide. Une simple commande logcat comme ci-dessus révélerait des informations utiles pour un benchmarking basique du temps de démarrage entre ROMs.
  • Si vous savez ce que vous faites , Embedded Linux Wiki ont une liste de modifications possibles pour améliorer le temps de démarrage.

Amélioration du temps de démarrage

Sur votre commentaire

ART a été conçu pour accélérer l'exécution des applications. Qui travaille sur une solution pour accélérer le démarrage ? hors des sentiers battus ?

À mon avis, il est inutile de modifier le temps de démarrage et les gains sont insignifiants. Puisque votre téléphone va, théoriquement Il est beaucoup plus important de maintenir la stabilité du système (en contrepartie d'un processus de démarrage plus long) pour garantir un temps de fonctionnement plus élevé et moins d'erreurs.

0 votes

adb logcat -d -b events -v threadtime | grep "boot" revient vide. J'ai vérifié au redémarrage, et il n'y a toujours pas de logs dans la correspondance. boot .

0 votes

@Rexford : hmmm, le mien fonctionne parfaitement. Vous pourriez essayer de l'acheminer vers un pager (par exemple : less) et d'effectuer une recherche à partir de là : adb logcat -d -b events -v threadtime | less . Ou modifier le tampon de l'anneau logcat

0voto

Marc.2377 Points 404

Pour ce que cela vaut, j'exécute Android-x86 dans une machine virtuelle sous Linux et il démarre en 22 secondes environ, ce qui est comparable à la plupart des distributions GNU/Linux et à Windows 10 sur un disque SSD avec un processeur de bureau à quatre cœurs.

Je ne considère donc pas que le temps de démarrage d'Android soit particulièrement lent.

0 votes

Rappelons que la question a été posée en 2015.

0 votes

@AndyYan J'ai remarqué, mais Android-x86 est beaucoup plus ancien.

0 votes

Les spécifications matérielles sont là ; la pression logicielle a beaucoup moins d'importance avec un matériel aussi puissant (même après la dégradation de l'efficacité dans les machines virtuelles).

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