À partir de la documentation Android ici http://developer.android.com/reference/android/app/Activity.html , il est indiqué que «l'activité vient au premier plan» sera appelée onPause()
, et «l'activité n'est plus visible» appellera onStop()
.
«L'activité au premier plan» n'est-elle pas la même chose que «L'activité n'est plus visible»? Pouvez-vous me dire quelle est la différence entre eux?
paused
activité est complètement vivante (elle conserve toutes les informations d'état et de membre et reste attachée au gestionnaire de fenêtres). Unestopped
activité conserve également toutes les informations sur l'état et les membres, mais n'est plus attachée auwindow manager
.Réponses:
Non, si une activité passe au premier plan, cela ne signifie pas nécessairement que l'autre activité est complètement invisible. Prenons le cas suivant:
Ici, nous voyons les deux activités en même temps. La première activité avec les champs est masquée par une autre activité et l'utilisateur ne peut plus interagir avec elle. Cependant, il est toujours visible avec toutes les conséquences qui en résultent.
Cela laisse une question quelle activité est considérée comme totalement opaque et couvrant tout l'écran et laquelle ne l'est pas. Cette décision est basée sur la fenêtre contenant l'activité. Si la fenêtre a un drapeau
windowIsFloating
ouwindowIsTranslucent
, alors il est considéré que l'activité ne rend pas les éléments sous-jacents invisibles, sinon elle le fait et provoqueraonStop()
l'appel. Le code correspondant se trouve danscom.android.server.am.ActivityRecord
:la source
onPause()
etonStop()
. Est-ce à 100%? Si un seul pixel de l'activité précédente est visible, est-ce toujoursonPause()
?onPause()
n'est pas du tout appelée lorsqu'une boîte de dialogue est affichée.onPause()
n'est appelé que lorsque j'appuie sur le bouton d' accueil . Comment est-ce possible?Si vous pouvez toujours voir une partie de celui-ci (
Activity
venir au premier plan n'occupe pas tout l'écran ou il est quelque peu transparent),onPause()
sera appelé. Si vous ne voyez aucune partie de celui-ci,onStop()
sera appelé.Un dialogue **, par exemple, peut ne pas couvrir la totalité du précédent
Activity
, et ce serait le momentonPause()
d'être appelé.** Je ne parle pas ici d'une boîte de dialogue Android, mais plutôt d'une idée conceptuelle de quelque chose qui apparaît et n'obscurcit qu'une partie de l'écran de l'utilisateur. Cette note a été ajoutée pour clarifier sur la base d'un commentaire de @GMsoF ci-dessous
la source
Dialog
, comme dans la classe Android. Ce à quoi je voulais en venir, cependant, c'est quelque chose qui obscurcit en partie le premierActivity
pour illustrer l'idée que toutes les nouveautésActivity
n'ont pas besoin de couvrir complètement les précédentes.Être au premier plan signifie que l'activité a un focus d'entrée. Par exemple, une activité peut être visible mais partiellement masquée par une boîte de dialogue qui a le focus. Dans ce cas,
onPause()
sera appelé, mais pasonStop()
. Lorsque la boîte de dialogue disparaît, laonResume()
méthode de l'activité sera appelée (mais pasonStart()
).la source
onPause()
est appelé lorsque l'appareil se met en veille ou lorsqu'une boîte de dialogue apparaît" . Comme ce fil l' indique clairement, cependant, une boîte de dialogue ne signifie pas nécessairement qu'une activité est mise en pause (bien que ce soit pour, par exemple, une activité présentée sous forme de boîte de dialogue ).En pratique , il faut considérer la différence entre «onPause ()» et «onPause () + onStop ()».
Chaque fois qu'une nouvelle activité se produit et occupe une partie de l'espace de l'écran. Ainsi, votre activité précédente est toujours visible dans une certaine mesure. Dans ce cas, l'activité précédemment exécutée n'est pas poussée vers Back Stack. Donc, ici, seule la méthode onPause () est appelée .
D'autre part, si une nouvelle activité se produit et occupe le plein écran de sorte que votre activité précédente en cours disparaisse. Dans ce cas, votre activité précédente est déplacée vers Back Stack. Ici, onPause () + onStop () sont appelés.
Vers les résumés
onPause () - L'écran est partiellement couvert par d'autres nouvelles activités. L'activité n'est pas déplacée vers Back Stack.
onPause () + onStop () - L'écran est entièrement couvert par d'autres nouvelles activités. L'activité est déplacée vers Back Stack.
En savoir plus sur Back Stack .
la source
En termes concis:
onStop()
de la méthode du cycle de vie de l'activité précédente est invoquée lorsqu'une autre activité est affichée. Lorsque vous avez Dialogue en tête de l'activité, ilonPause()
est appelé.Remarque : les activités sont les composants qui remplissent tout votre écran.
Remarque : les dialogues ne sont pas des activités car ils ne remplissent pas complètement l'écran.
la source
J'ai rencontré de nombreux problèmes avec les méthodes onPause et onStop et je vais donc effacer trois scénarios que j'ai rencontrés:
1. Lorsque vous cliquez sur le bouton de l'application récente, aucune méthode de cycle de vie n'est appelée mais onWindowFocusChanged (booléen hasFocus) est appelé avec la valeur hasFocus passé comme faux. Dans la version Android antérieure à 5, méthode onPause utilisée pour être appelé, en appuyant sur le bouton de l'application récente.
2. Lorsqu'une activité de type pop-up apparaît au-dessus de votre activité, comme mentionné par Malcolm , le bouton onPause est appelé. Si une nouvelle activité qui occupe tout l'écran est appelée, onStop est appelé sur l'activité précédente. La boîte de dialogue d'autorisation Android provoque également l'appel de votre activité en pause.
3.Si l'écran expire pendant votre activité, onPause est appelé. Après un certain temps, si vous n'ouvrez pas l'écran, onStop sera appelé.
Aussi une chose importante mentionnée par l' ateiob qui complète la réponse
J'espère que ça aide.
la source
chaque fois qu'une nouvelle ACTIVITÉ démarre, l'activité précédente
onPause
sera appelée avec défi en toutes circonstances.en fait, il y aura deux circonstances:
1- une partie de l'activité précédente est visible ou la nouvelle activité est transparente: seule
onPause
sera appelée.2- L'activité précédente est entièrement couverte par une nouvelle activité: les deux
onPause
etonStop
sera appelée---- Bon pour énoncer quelques notes:
NOTE 1: si une boîte de dialogue démarre au-dessus d'une activité AUCUNE de
onPause
ouonStop
ne sera appelée.NOTE 2: s'il s'agit d'une activité dont le thème est défini sur une boîte de dialogue, le comportement ressemblera à une activité normale.
REMARQUE 3: apparemment une boîte de dialogue système comme une boîte de dialogue d'autorisation car la guimauve provoquera
onPause
.la source
Oui, j'essaie de comprendre et je peux l'expliquer ci-dessous:
Il y a 2 activités: ActivityA et ActivityB
Voici l'activité B.Suivez mon commentaire dans le code
J'espère que c'est clairement
la source