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

27

Une chose me laisse perplexe. Il semble que si j'utilise un programme sur Android et que j'appuie sur le bouton "Accueil", je vois l'écran d'accueil et je peux réexécuter le programme et voir ce programme dans le même état qu'avant - il semble donc que le programme ne soit pas complètement redémarré, juste suspendu puis repris.

Pourtant, cela ne semble pas se produire de manière cohérente avec le jeu Air Control. Parfois, lorsque je joue à Air Control et que j'appuie sur "home", puis que je réexécute Air Control - il est suspendu (comme si j'avais appuyé sur le bouton "pause") et je peux reprendre le jeu. Parfois, la même chose conduit Air Control à abandonner le jeu et à recommencer.

Il semble donc que je ne comprenne pas quelque chose.

Quel est le problème ici? Qu'arrive-t-il à un programme lorsque vous appuyez sur "home"? Continue-t-il de fonctionner ou que fait-il?

acéré
la source
Je doute que le fait d'appuyer sur le bouton d'accueil entraîne une consommation d'énergie plus élevée.
Flow

Réponses:

12

En appuyant sur les Hometouches, vous passez de l'application à l'écran d'accueil, tout en laissant votre application en arrière-plan. C'est un peu comme passer d'une fenêtre à l'autre sur un PC Windows.

Sauf que lorsque votre téléphone manque de ressources comme la mémoire, il commencera à fermer les applications qui s'exécutent en arrière-plan, de sorte 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 "tuera" pour économiser les 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.

Le Backbouton est le moyen de fermer les applications afin qu'elles soient réellement fermées.

Voir aussi Quelle est la bonne façon de fermer des applications sur Android?

GAThrawn
la source
26

Le document Android Development Tasks and Back Stack couvre en fait assez bien cela. Un extrait pertinent:

Une tâche est une unité cohérente qui peut passer en «arrière-plan» lorsque les utilisateurs commencent une nouvelle tâche ou vont à l'écran d'accueil, via la touche ACCUEIL. En arrière-plan, toutes les activités de la tâche sont arrêtées, mais la pile arrière de la tâche reste intacte. La tâche a simplement perdu le focus tandis qu'une autre tâche a lieu, comme illustré dans la figure 2. Une tâche peut ensuite revenir à la " premier plan "afin que les utilisateurs puissent reprendre là où ils se sont arrêtés. Supposons, par exemple, que la tâche en cours (tâche A) ait trois activités dans sa pile, deux sous l'activité en cours. L'utilisateur appuie sur la touche HOME, puis démarre une nouvelle application à partir du lanceur d'applications. Lorsque l'écran d'accueil apparaît, la tâche A passe en arrière-plan. Lorsque la nouvelle application démarre, le système démarre 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 retourne à nouveau à la maison et sélectionne l'application qui a initialement démarré la tâche A. Maintenant, la tâche A vient 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 peut également revenir à la tâche B en revenant à la maison et en sélectionnant l'icône de l'application qui a démarré cette tâche (ou en appuyant longuement sur la touche ACCUEIL pour révéler les tâches récentes et en sélectionner une). Ceci est un exemple de multitâche sur Android. l'utilisateur peut également revenir à la tâche B en revenant à la maison et en sélectionnant l'icône de l'application qui a démarré cette tâche (ou en appuyant longuement sur la touche HOME pour révéler les tâches récentes et en sélectionner une). Ceci est un exemple de multitâche sur Android. l'utilisateur peut également revenir à la tâche B en revenant à la maison et en sélectionnant l'icône de l'application qui a démarré cette tâche (ou en appuyant longuement sur la touche HOME pour révéler les tâches récentes et en sélectionner une). Ceci est un exemple de multitâche sur Android.

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

Résumé : la tâche est déplacée en arrière-plan lorsque vous appuyez sur Homeet se trouve en mémoire, sans rien faire et en conservant son état. Cela signifie que (généralement parlant) vous pouvez revenir à la tâche et elle reprendra là où elle s'était 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. Quand et si cela se produit, cela dépend entièrement du système, et c'est probablement pourquoi vous voyez 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 relancerez. Donc, à moins que l'auteur de l'application n'ait pris des mesures pour enregistrer l'état de l'application pendant le processus de destruction, il sera perdu (et l'enregistrement de l' état exact dans des choses comme les jeux est assez peu pratique).

Un autre bon document (mais aussi détaillé) est celui qui couvre le cycle de vie des activités (il y a un bel organigramme si vous faites défiler un peu).

eldarerathis
la source
Ils sont donc tués pour chaque tâche et non pour chaque activité / processus. Ce dernier permettrait la suppression partielle des tâches, ce qui est probablement indésirable.
jiggunjer
4

Appuyer sur la touche Accueil permet à l'utilisateur de démarrer une nouvelle tâche, en affichant le lanceur. Toutes les tâches actives (et par conséquent les activités, y compris votre exemple "Contrôle aérien") appellent leur onPause()méthode.

Il appartient à l'application (et à son activité) de restaurer l'état précédent exact lorsqu'elle revient visible. Il est également possible que le processus d'applications soit tué pendant que l'activité est en arrière-plan, mais cela ne devrait pas affecter l'expérience des utilisateurs. L'utilisateur ne devrait pas être en mesure de faire la différence si une activité vient d'être interrompue ou si elle a également été supprimée. Cela pourrait expliquer le comportement différent d'Air Control, ce qui pourrait être le signe d'une implémentation défectueuse de la gestion du cycle de vie Android.

Couler
la source
Je pense que par «tué», vous voulez dire arrêté, par opposition à détruit. Je crois en la terminologie Linux normale lorsque vous tuez un processus (par exemple, l'activité), vous destroy()les composants d'application correspondants.
jiggunjer
Non, je veux dire détruit.
Flow
Lorsque vous appuyez sur la touche d'accueil, la onStopméthode est appelée. Un processus interrompu ne signifie pas que l'activité obtient sa onDestroyedméthode, bien qu'elle soit en effet similaire. «Tuer» un processus d'activité signifie que la machine virtuelle est supprimée de la RAM. Pour moi, cela (Android le tue) semble susceptible d'affecter l'expérience utilisateur.
jiggunjer
4

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

Une autre complication est que parfois Android appellera la fonction onCreate () d'une application lorsque 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 le comportement au développeur pour correction. La plupart des applications ont un e-mail de contact sur le marché.

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

Gdalya
la source
3

Bouton d'accueil enfoncé dans une application:

La plupart des applications enregistreront leur état (tout bit de données qui serait nécessaire pour rester cohérent lors de la reprise), et l'appareil passera à l'application de lancement.

Bouton Accueil Appuyez sur lorsque sur les écrans d'accueil:

Ceci est configurable par de nombreux lanceurs tiers; cependant, beaucoup d'entre eux vous ramènent par défaut à votre écran d'accueil "principal" (le lanceur par défaut le fait).

Ce qui pourrait inquiéter votre ami:

Le changement d'applications peut être gourmand en mémoire et entraîner plusieurs écritures de disque pour enregistrer les données. Cela utilise la batterie; cependant, ce n'est généralement pas la principale cause de la décharge de la batterie sur les appareils (les systèmes d'exploitation sont optimisés pour faire ces choses).

Certaines applications continueront de fonctionner en tant qu'application d'arrière-plan, donc appuyer sur le bouton d'accueil ne les tuera pas (par exemple, Google Play Musique continuera de jouer après avoir appuyé sur le bouton d'accueil).

Votre ami peut craindre qu'en appuyant sur le bouton d'accueil, vous n'ayez pas quitté le programme et qu'il soit donc toujours en cours d'exécution. Android déchargera ces applications si nécessaire.

Vous et votre ami devriez être plus préoccupés par l'écran - qui utilise le plus d'énergie.

Dylan Yaga
la source