La liste suivante présente les différents types de processus par ordre d'importance (le premier processus est le plus important et est tué en dernier) :
- Processus de premier plan
- Processus visible
- Processus de service
- Processus de base
- Processus vide
Note : Android classe un processus au niveau le plus élevé possible, en fonction de l'importance des composants actuellement actifs dans le processus. Par exemple, si un processus héberge un service et une activité visible, le processus est classé comme un processus visible, et non comme un processus de service.
Ceci est référencé à partir d'ici Processus et fils
EDITAR:
Comprendre la priorité des applications et les états du processus
L'ordre dans lequel les processus sont tués pour récupérer les ressources est déterminé par la priorité des applications hébergées. La priorité d'une application est égale à son composant le plus prioritaire.
Lorsque deux applications ont la même priorité, le processus qui a été le plus longtemps à une priorité inférieure sera tué en premier. La priorité des processus est également affectée par les dépendances interprocessus ; si une application dépend d'un service ou d'un fournisseur de contenu fourni par une deuxième application, l'application secondaire aura une priorité au moins aussi élevée que l'application qu'elle supporte.
Toutes les applications Android resteront en cours d'exécution et en mémoire jusqu'à ce que le système ait besoin de ses ressources pour d'autres applications.
Il est important de structurer correctement votre application pour que sa priorité soit adaptée au travail qu'elle effectue. Si vous ne le faites pas, votre application pourrait être tuée alors qu'elle est en train de réaliser quelque chose d'important. La liste suivante détaille chacun des états de l'application présentés dans la figure , en expliquant comment l'état est déterminé par les composants de l'application qui le composent :
Processus actifs Les processus actifs (au premier plan) sont ceux qui hébergent des applications dont les composants interagissent actuellement avec l'utilisateur. Ce sont les processus qu'Android essaie de garder réactifs en récupérant des ressources. Ces processus sont généralement très peu nombreux et ne sont tués qu'en dernier recours.
Les processus actifs comprennent :
1. les activités dans un état "actif", c'est-à-dire qu'elles sont au premier plan et répondent aux événements de l'utilisateur. Vous explorerez plus en détail les états des activités plus loin dans ce chapitre.
2. les activités, les services ou les récepteurs de diffusion qui exécutent actuellement un gestionnaire d'événement onReceive.
3. les services qui exécutent un gestionnaire d'événement onStart, onCreate ou onDestroy.
Processus visibles Les processus visibles, mais inactifs, sont ceux qui hébergent des activités "visibles". Comme son nom l'indique, les activités visibles sont visibles, mais elles ne sont pas au premier plan et ne répondent pas aux événements de l'utilisateur. Cela se produit lorsqu'une activité n'est que partiellement masquée (par une activité non visible ou transparente). Il y a généralement très peu de processus visibles, et ils ne seront tués que dans des circonstances extrêmes pour permettre aux processus actifs de continuer.
Démarrage des processus de service Traite les services d'hébergement qui ont été lancés. Les services prennent en charge les traitements en cours qui doivent se poursuivre sans interface visible. Comme les services n'interagissent pas directement avec l'utilisateur, ils reçoivent une priorité légèrement inférieure à celle des activités visibles. Ils sont toujours considérés comme des processus d'avant-plan et ne seront pas tués, sauf si des ressources sont nécessaires aux processus actifs ou visibles.
Processus de base Les processus hébergeant des activités qui ne sont pas visibles et dont aucun service n'a été lancé sont considérés comme des processus d'arrière-plan. Il y aura généralement un grand nombre de processus d'arrière-plan qu'Android tuera en utilisant la méthode du dernier vu, premier tué, afin d'obtenir des ressources pour les processus d'avant-plan.
Processus vides Pour améliorer les performances globales du système, Android conserve souvent les applications en mémoire après qu'elles aient atteint la fin de leur durée de vie. Android maintient ce cache pour améliorer le temps de démarrage des applications lorsqu'elles sont relancées. Ces processus sont tués régulièrement si nécessaire.
Pour plus d'informations, regardez ici (j'ai trouvé sur ce blog). Gestion de la mémoire dans Android
EDITAR:
I think Android is basic Linux so, whatever scheduler works for Linux is same in Android.
La différence entre le programmateur Android et le programmateur Linux
Planificateur - 5 fichiers - Le noyau Android contient également de légères modifications du planificateur de processus du CPU et des algorithmes de maintien du temps. Nous ne connaissons pas l'historique de ces changements, et l'impact n'était pas évident sur la base d'un examen superficiel.
Processus de préemption :
Comme mentionné, le système d'exploitation Linux est préemptif. Lorsqu'un processus entre dans l'état TASK_RUNNING, le noyau vérifie si sa priorité est supérieure à celle du processus en cours d'exécution. Si c'est le cas, l'ordonnanceur est invoqué pour choisir un nouveau processus à exécuter (vraisemblablement le processus qui vient de devenir exécutable). De plus, lorsque le timelice d'un processus atteint zéro, il est préempté et l'ordonnanceur est appelé à sélectionner un nouveau processus.
La politique d'ordonnancement en action
Considérons un système comportant deux tâches exécutables : un éditeur de texte et un encodeur vidéo. L'éditeur de texte est lié aux E/S parce qu'il passe presque tout son temps à attendre que l'utilisateur appuie sur les touches (peu importe la vitesse à laquelle l'utilisateur tape, il n'est pas si rapide). Malgré cela, lorsqu'il reçoit une pression sur une touche, l'utilisateur s'attend à ce que l'éditeur réponde immédiatement. À l'inverse, l'encodeur vidéo est lié au processeur. Outre la lecture du flux de données brutes sur le disque et l'écriture ultérieure de la vidéo résultante, l'encodeur passe tout son temps à appliquer le codec vidéo aux données brutes. Il n'a pas de contraintes temporelles fortes sur le moment où il s'exécute - s'il commençait à s'exécuter maintenant ou dans une demi-seconde, l'utilisateur ne pourrait pas le savoir. Bien sûr, plus vite il s'exécute, mieux c'est.
Dans ce système, l'ordonnanceur donne à l'éditeur de texte une priorité plus élevée et un plus grand timelice que l'encodeur vidéo, parce que l'éditeur de texte est interactif. L'éditeur de texte dispose d'un grand nombre de tranches de temps. De plus, comme l'éditeur de texte a une priorité plus élevée, il est capable de préempter l'encodeur vidéo si nécessaire. Cela garantit que l'éditeur de texte est capable de répondre immédiatement aux pressions des touches de l'utilisateur. Cela se fait au détriment de l'encodeur vidéo, mais comme l'éditeur de texte ne fonctionne que par intermittence, l'encodeur vidéo peut monopoliser le temps restant. Les performances des deux applications sont ainsi optimisées.