Lorsque vous démarrez un nouveau processus pour exécuter une App/Service, enfin dans ActivityManagerService.java, il y a :
final String entryPoint = "android.app.ActivityThread";
return startProcessLocked(hostingType, hostingNameStr, entryPoint, app, uid, gids,
runtimeFlags, mountExternal, seInfo, requiredAbi, instructionSet, invokeWith,
startTime);
Qui finalement appelle Process.start. C'est la même chose qu'avec le java standard, vous passez une classe puis la VM crée un nouveau processus et exécute main() de ActivityThread.java :
public static void main(String[] args) {
......
Looper.loop();
throw new RuntimeException("Main thread loop unexpectedly exited");
}
La fonction principale déclenchera une action qui enverra un message IPC pour notifier au gestionnaire d'activité que le processus a démarré avec succès, puis après avoir notifié le processus qui a initié le démarrage du nouveau processus de cet événement, le gestionnaire d'activité notifiera le nouveau processus pour faire le processus de démarrage de l'activité réelle, qui crée la classe d'activité selon le manifeste, puis appelle OnCreate, etc.
Il y a quelques réponses ici qui sont totalement fausses et qui obtiennent beaucoup de votes, j'espère qu'un modéré etc. pourra vérifier cela.