27 votes

Qu'arrive-t-il à un programme en cours d'exécution lorsque le bouton "home" est pressé dans un téléphone Android ?

Une chose m'intrigue. Il semble que si j'utilise un programme sur Android et que j'appuie sur le bouton "home", je vois l'écran d'accueil et je peux relancer le programme et voir ce programme dans le même état qu'il était avant - il semble donc que le programme n'est pas complètement redémarré, juste suspendu et ensuite repris.

Pourtant, cela ne semble pas se produire systématiquement avec le jeu Air Control. Parfois, lorsque je joue à Air Control et que j'appuie sur "home" et que je relance ensuite Air Control - il est mis en pause (comme si j'avais appuyé sur le bouton "pause") et je peux reprendre le jeu. Parfois, la même chose se produit lorsque Air Control abandonne le jeu et recommence.

Il semble donc que je ne comprenne pas quelque chose.

Qu'est-ce qui se passe ici ? Qu'arrive-t-il à un programme lorsqu'on appuie sur "home" ? Continue-t-il à fonctionner ou que fait-il ?

27voto

David Negron Points 971

Le document sur le développement d'Android Tâches et pile arrière couvre en fait cela assez bien. Un extrait pertinent :

Une tâche est une unité cohésive qui peut passer en "arrière-plan" lorsque les utilisateurs commencent une nouvelle tâche ou vont à l'écran d'accueil, via la touche HOME. Lorsqu'elle est en l'arrière-plan, toutes les activités de la tâche sont arrêtées, mais la pile arrière de la tâche est désactivée. mais la pile arrière de la tâche reste intacte - la tâche a simplement perdu le focus pendant qu'une autre tâche se déroule. pendant qu'une autre tâche se déroule, comme le montre la figure 2. Une tâche peut alors revenir au "premier plan" pour que les utilisateurs puissent reprendre là où ils s'étaient arrêtés. Supposons, par exemple, que la tâche en cours (tâche A) comporte trois activités dans sa pile - deux sous la tâche A, une sous la tâche B et une sous la tâche C. activités dans sa pile - deux sous l'activité en cours. L'utilisateur appuie sur la touche HOME, puis lance une nouvelle application depuis le lanceur d'applications. Lorsque l'écran d'accueil apparaît, la tâche A passe à l'arrière-plan. l'arrière-plan. Lorsque la nouvelle application démarre, le système lance une tâche pour cette application (tâche B) avec sa propre pile d'activités. Après avoir interagi avec cette application, l'utilisateur revient à l'écran d'accueil et sélectionne l'application qui a lancé la tâche A à l'origine. A passe au premier plan - les trois activités de sa pile sont intactes et l'activité en haut de la pile reprend. À ce stade, l'utilisateur l'utilisateur peut également revenir à la tâche B en retournant à la maison et en sélectionnant l'application ico. l'icône de l'application qui a lancé cette tâche (ou en touchant et en maintenant la touche HOME la touche HOME pour afficher les tâches récentes et en sélectionner une). Il s'agit d'une exemple de multitâche sur Android.

Remarque : plusieurs tâches peuvent être maintenues en arrière-plan en même temps. Cependant, si l'utilisateur exécute de nombreuses tâches d'arrière-plan en même temps, le système pourrait commencer à détruire des activités d'arrière-plan afin de récupérer de la mémoire, ce qui entraîne la perte des états d'activité. Voir la section suivante sur l'état des activités.

Resumen : La tâche est déplacée à l'arrière-plan lorsque vous appuyez sur Home et reste en mémoire, ne faisant rien et conservant son état. Cela signifie (en général) que vous pouvez revenir à la tâche et qu'elle reprendra là où elle s'est arrêtée. Cependant, le système Android peut - et va - tuer les tâches d'arrière-plan s'il a besoin de récupérer de la mémoire. C'est probablement la raison pour laquelle vous observez un comportement incohérent lors de la reprise.

Si la tâche est détruite par le système, elle devra être recréée lorsque vous la lancerez à nouveau. Donc, à moins que l'auteur de l'application n'ait pris des mesures pour sauvegarder l'état de l'application pendant le processus de destruction, il sera perdu (et la sauvegarde de l'état de l'application ne sera pas possible). exact dans des choses comme les jeux est assez peu pratique).

Un autre bon document (mais aussi verbeux) est celui qui traite de la Cycle de vie des activités (il y a un bel organigramme si vous faites défiler un peu vers le bas).

12voto

Joe Shaw Points 6386

En appuyant sur la touche Home vous fait passer de l'application à l'écran d'accueil, tout en laissant votre application fonctionner en arrière-plan. C'est un peu comme passer d'un Windows à l'autre sur un PC Windows.

Sauf que lorsque votre téléphone est à court de ressources, comme la mémoire, il commence à fermer les applications qui tournent en arrière-plan, afin que votre téléphone dispose de suffisamment de ressources pour ce que vous essayez de faire maintenant. Les jeux sont souvent parmi les premières applications que le téléphone "tue" pour économiser des ressources, car ils utilisent souvent beaucoup plus de mémoire et de CPU que les autres applications. C'est pourquoi, parfois, votre jeu est toujours en pause, et parfois Android l'a fermé pour vous.

El Back est le moyen de fermer les applications de manière à ce qu'elles soient réellement fermées.

Voir aussi Quelle est la bonne façon de fermer les applications dans Android ?

4voto

Flow Points 18254

En appuyant sur la touche Touche d'accueil permet à l'utilisateur de démarrer une nouvelle tâche, en affichant le lanceur. Toutes les Tâches actives (et donc les Activités, y compris votre exemple de "Contrôle aérien") appellent leur onPause() méthode.

C'est à l'application (et à son activité) de rétablir exactement l'état précédent lorsqu'elle redevient visible. Il est également possible que le processus de l'application soit tué pendant que l'activité est en arrière-plan, mais cela ne devrait pas affecter l'expérience de l'utilisateur. L'utilisateur ne devrait pas être en mesure de faire la différence entre une activité simplement mise en pause et une activité tuée. Cela pourrait expliquer le comportement différent d'Air Control, qui pourrait être le signe d'une mise en œuvre défectueuse de la gestion du cycle de vie d'Android.

4voto

Gdalya Points 669

Ma réputation est encore trop faible sur ce site pour que je puisse voter, alors je réponds pour mettre en valeur la réponse de Flow. Je continue à rencontrer ce problème dans une de mes applications. J'ai plusieurs contrôles de spinner et vous devez explicitement enregistrer leur état dans onPause() et ensuite restaurer les états dans onResume() -- Android ne se souvient pas de leurs états automatiquement.

Une autre complication est qu'Android appelle parfois la fonction onCreate() d'une application alors que vous vous attendez à ce qu'elle appelle onResume().

Votre problème avec Air Control (ou toute autre application) est donc spécifique à cette application et vous devez signaler ce comportement au développeur pour qu'il le corrige. La plupart des applications ont un email de contact dans le Market.

BTW, si vous voulez comprendre le cycle de vie des applications, je vous recommande le chapitre 2 de Hello, Android d'Ed Burnette, en particulier la figure 2.3.

3voto

Dylan Yaga Points 2385

Bouton d'accueil Appuyé lorsque vous êtes dans une application :

La plupart des applications sauvegardent leur état (toutes les données nécessaires pour rester cohérentes lors de la reprise), et l'appareil passe à l'application de lancement.

Bouton d'accueil Appuyez sur ce bouton lorsque vous êtes sur les écrans d'accueil :

Cette fonction est configurable par de nombreux lanceurs tiers, mais beaucoup d'entre eux vous ramènent par défaut à votre écran d'accueil "principal" (c'est ce que fait le lanceur par défaut).

Ce qui pourrait inquiéter votre ami :

Le changement d'application peut être gourmand en mémoire et entraîner plusieurs écritures sur le disque pour sauvegarder les données. Cela consomme de la batterie, mais ce n'est généralement pas la principale cause d'épuisement de la batterie des appareils (les systèmes d'exploitation sont optimisés pour faire ces choses).

Certaines applications continueront de s'exécuter en arrière-plan, de sorte que le fait d'appuyer sur le bouton d'accueil ne les tuera pas (par exemple, Google Play Music continuera de fonctionner après avoir appuyé sur le bouton d'accueil).

Votre ami pourrait s'inquiéter du fait qu'en appuyant sur le bouton d'accueil, vous n'avez pas quitté le programme et qu'il est donc toujours en cours d'exécution. Android déchargera ces applications si nécessaire.

Vous et votre ami devriez vous préoccuper davantage de l'écran, qui consomme le plus d'énergie.

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