J'essaie de comprendre comment les applications Android lancent. La question est de savoir comment zygote bifurque exactement Dalvik VM. Je ne comprends pas vraiment pourquoi il n'est pas possible d'exécuter plusieurs applications dans la même machine virtuelle Dalvik.
Réponses
Trop de publicités?Q. comment zygote exactement fourche Dalvik VM?
Réponse Courte: Zygote processus fondamentalement froid bottes une VM sur le démarrage du système. Une fois fait, il est à l'écoute pour une prise pour les commandes entrantes. D'autres processus (par exemple, ActivityManagerService) enregistre des commandes à cette prise, chaque fois qu'il a besoin d'un nouveau processus pour une application. Cette commande est lu par le Zygote processus et les appels fork() - si le processus de l'enfant devient un pré-chauffé jusqu'VM pour son exécution. C'est de cette façon zygote fourches le Dalvik VM.
Réponse longue: (cela pourrait être vraiment long) Après le noyau est chargé,
init.rc
est analysé et natif de services sont démarrés. Avec cela, l'/system/bin/app_process
(code Source: frameworks/base/cmds/app_process/app_main.cpp) est exécuté. Ce qui a finalement appelsAndroidRuntime.start()
de la fonction (code Source: frameworks/base/core/jni/AndroidRuntime.cpp), en lui passant les paramètrescom.android.internal.os.ZygoteInit
etstart-system-server
.L'
AndroidRuntime.start()
démarre la machine virtuelle Java, puis appelleZygoteInit.main()
(code Source: frameworks/base/core/java/com/android/internal/os/ZygoteInit.java), en lui passant le paramètrestart-system-server
.
ZygoteInit.main()
inscrit tout d'abord le zygote socket (le zygote écoute pour une prise pour les commandes entrantes, et sur la réception de la commande nouveau, donne naissance à un nouveau processus de demande). La prochaine chose qui se passe est, il met beaucoup de classes (qui est répertorié dans les cadres/base/préchargé-classes, la dernière que j'ai vérifié, 2307 lignes, en android 4.0.4) et tous l'ensemble des ressources du système comme un drawable, xmls, etc. Ensuite, il appellestartSystemServer()
qui fourches d'un nouveau processus pour l'com.android.server.SystemServer
(code Source: frameworks/base/services/java/com/android/server/SystemServer.java). Bifurcation de serveur de système est un cas spécial, parce que dans tous les autres cas, le zygote processus d'écoute à une prise secteur et fourches pour de nouvelles commandes, comme nous le verrons bientôt.Après SystemServer est fourchue, une fonction
runSelectLoopMode()
est appelé. C'est unwhile(true)
boucle qui, fondamentalement, établit unZygoteConnection
avec le zygote prise et attend les commandes sur elle. Quand une commande est reçue,ZygoteConnection.runOnce()
est appelé (code Source: frameworks/base/core/java/com/android/internal/os/ZygoteConnection.java)
ZygoteConnection.runOnce()
des appelsZygote.forkAndSpecialize()
(code Source: libcore/dalvik/src/main/java/dalvik/system/Zygote.java) qui appelle tout simplement un natvie fonction de faire de la fourche. Ainsi, comme dans le cas de SystemServer, un processus enfant est créé qui a un pré-chauffé jusqu'Dalvik pour lui-même.Q. pourquoi il n'est pas possible d'exécuter plusieurs applications en même Dalvik VM?
C'est une décision de conception autant que je sache. Android les gars juste décidé de fourche d'une nouvelle VM par processus, pour la sécurité via le bac à sable.
Pas de. Dalvik n'a pas de durée de processus.
Cependant, le Liant mécanisme IPC peut faire un très convaincante travail de faire apparaître les objets de migrer vers un autre processus et de ses Dalvik instance. Aussi, la gestion de la mémoire est très bonne sur le partage en lecture seule des pages à travers tous les processus qui en ont besoin. Le Dalvik processus de l'hébergement d'une application classique est fourchue hors du zygote avec toutes les communes android bibliothèques déjà mappé, de sorte que de nouvelles copies uniques n'ont pas à être ouvert.
Source: Faire des applications en utilisant plusieurs processus partagent un Dalvik exemple?
Également consulter ces liens:
http://davidehringer.com/software/android/The_Dalvik_Virtual_Machine.pdf