Quel est le cycle de vie d'une activité Android? Pourquoi tant de méthodes de sondage similaires ( onCreate()
, onStart()
, onResume()
) appelé lors de l' initialisation, et tant d'autres ( onPause()
, onStop()
, onDestroy()
) a appelé à la fin?
Quand ces méthodes sont-elles appelées et comment doivent-elles être utilisées correctement?
Réponses:
Voyez-le dans Activity Lifecycle (chez les développeurs Android).
onCreate () :
onRestart () :
onStart () :
pour résumer() :
onPause () :
onStop () :
onDestroy () :
Lors du premier chargement de l'activité, les événements sont appelés comme suit:
Lorsque vous cliquez sur le bouton Téléphone, l'activité passe en arrière-plan et les événements ci-dessous sont appelés:
Quittez le numéroteur téléphonique et les événements ci-dessous seront appelés:
Lorsque vous cliquez sur le bouton Précédent OU essayez de terminer () l'activité, les événements sont appelés comme suit:
États d'activité
Le système d'exploitation Android utilise une file d'attente prioritaire pour vous aider à gérer les activités en cours d'exécution sur l'appareil. En fonction de l'état dans lequel se trouve une activité Android particulière, une certaine priorité lui sera attribuée dans le système d'exploitation. Ce système de priorité aide Android à identifier les activités qui ne sont plus utilisées, permettant au système d'exploitation de récupérer de la mémoire et des ressources. Le diagramme suivant illustre les états qu'une activité peut traverser pendant sa durée de vie:
Ces états peuvent être divisés en trois groupes principaux comme suit:
Actif ou en cours d'exécution - Les activités sont considérées comme actives ou en cours d'exécution si elles sont au premier plan, également appelées haut de la pile d'activités. Ceci est considéré comme l'activité la plus prioritaire dans la pile d'activités Android, et en tant que tel, il ne sera tué par le système d'exploitation que dans des situations extrêmes, comme si l'activité essaie d'utiliser plus de mémoire que celle disponible sur l'appareil, car cela pourrait entraîner la perte de l'interface utilisateur. devenir insensible.
En pause - Lorsque l'appareil se met en veille ou lorsqu'une activité est encore visible mais partiellement masquée par une nouvelle activité, non pleine grandeur ou transparente, l'activité est considérée comme interrompue. Les activités suspendues sont toujours actives, c'est-à-dire qu'elles conservent toutes les informations d'état et de membre et restent attachées au gestionnaire de fenêtres. Ceci est considéré comme la deuxième activité de priorité la plus élevée dans la pile d'activités Android et, en tant que tel, ne sera tué par le système d'exploitation que si la suppression de cette activité satisfait aux exigences en ressources nécessaires pour maintenir l'activité active / en cours d'exécution stable et réactive.
Arrêté - Les activités qui sont complètement masquées par une autre activité sont considérées comme arrêtées ou en arrière-plan. Les activités arrêtées tentent toujours de conserver leurs informations d'état et de membre aussi longtemps que possible, mais les activités arrêtées sont considérées comme la priorité la plus basse des trois États et, en tant que tel, le système d'exploitation supprimera les activités dans cet état en premier pour satisfaire les besoins en ressources d'activités prioritaires.
* Exemple d'activité pour comprendre le cycle de vie **
la source
L'activité a six états
Le cycle de vie des activités comprend sept méthodes
onCreate()
onStart()
onResume()
onPause()
onStop()
onRestart()
onDestroy()
Situations
Lorsque vous ouvrez l'application
Lorsque vous appuyez sur le bouton de retour et quittez l'application
Lorsque le bouton d'accueil est enfoncé
Après avoir appuyé sur le bouton d'accueil, ouvrez à nouveau l'application à partir de la liste des tâches récentes ou cliquez sur l'icône
Lorsque vous ouvrez une autre application depuis la barre de notification ou ouvrez les paramètres
Appuyez sur le bouton Retour à partir d'une autre application ou des paramètres utilisés pour voir notre application
Lorsqu'une boîte de dialogue s'ouvre à l'écran
Après avoir fermé la boîte de dialogue ou le bouton de retour de la boîte de dialogue
Tout téléphone sonne et l'utilisateur dans l'application
Lorsque l'utilisateur a appuyé sur le bouton de réponse du téléphone
Après la fin de l'appel
Lorsque l'écran du téléphone est éteint
Lorsque l'écran est rallumé
la source
La confusion est due au fait que Google a choisi des noms non intuitifs au lieu de quelque chose comme suit:
Le diagramme d'activité peut être interprété comme:
la source
CYCLE DE VIE ANDROID
Il existe sept méthodes qui gèrent le cycle de vie d'une application Android:
Répondez à quelles sont toutes ces méthodes pour:
Prenons un scénario simple où savoir dans quel ordre ces méthodes sont appelées nous aidera à clarifier pourquoi elles sont utilisées.
onCreate()
- - -> - - ->onStart()
onResume()
onPause()
- - ->onStop()
onRestart()
- - -> - - ->onStart()
onResume()
onStop()
- - ->onDestroy()
Il existe quatre états dans lesquels une activité peut éventuellement exister:
L'état de départ implique:
Création d'un nouveau processus Linux, allocation de nouvelle mémoire pour les nouveaux objets d'interface utilisateur et configuration de tout l'écran. Donc, la plupart du travail est impliqué ici.
L'état de fonctionnement implique:
C'est l'activité (état) qui est actuellement à l'écran. Cet état gère à lui seul des choses telles que la saisie à l'écran et le toucher et le clic sur les boutons.
Un état suspendu implique:
Lorsqu'une activité n'est pas au premier plan et à la place elle est en arrière-plan, alors l'activité est dite en pause.
L'état arrêté implique:
Une activité arrêtée ne peut être achetée au premier plan qu'en la redémarrant et elle peut également être détruite à tout moment.
Le gestionnaire d'activités gère tous ces états de manière à ce que l'expérience utilisateur et les performances soient toujours à leur meilleur, même dans les scénarios où la nouvelle activité est ajoutée aux activités existantes.
la source
J'aime cette question et ses réponses, mais jusqu'à présent, il n'y a pas de couverture des rappels moins fréquemment utilisés comme onPostCreate () ou onPostResume () . Steve Pomeroy a tenté un diagramme incluant ces derniers et comment ils se rapportent au cycle de vie des fragments d'Android , à https://github.com/xxv/android-lifecycle . J'ai révisé le grand diagramme de Steve pour inclure uniquement la partie Activité et je l'ai formaté pour une impression d'une page de format lettre. Je l'ai posté sous forme de texte PDF à https://github.com/code-read/android-lifecycle/blob/master/AndroidActivityLifecycle1.pdf et ci-dessous est son image:
la source
Sur la page Développeurs Android,
onPause ():
onStop ():
Supposons maintenant qu'il y a trois activités et que vous passez de A à B, puis onPause de A sera appelé maintenant de B à C, puis onPause de B et onStop of A sera appelé.
L'activité suspendue obtient un CV et arrêtée est redémarrée.
Lorsque vous appelez
this.finish()
, onPause-onStop-onDestroy sera appelé. La principale chose à retenir est la suivante: les activités en pause sont arrêtées et une activité arrêtée est détruite chaque fois qu'Android a besoin de mémoire pour d'autres opérations.J'espère que c'est assez clair.
la source
Ajout de plus d'informations en plus de la réponse la mieux notée (Ajout d'une section supplémentaire de KILLABLE et du prochain ensemble de méthodes, qui seront appelées dans le cycle de vie):
Source: developer.android.com
Notez le " Killable colonne " dans le tableau ci-dessus - pour les méthodes qui sont marquées comme pouvant être tuées, après le retour de cette méthode, le processus hébergeant l'activité peut être tué par le système à tout moment sans qu'une autre ligne de son code ne soit exécutée.
Pour cette raison, vous devez utiliser la
onPause()
méthode pour écrire toutes les données persistantes (telles que les modifications utilisateur) dans le stockage. De plus, la méthodeonSaveInstanceState(Bundle)
est appelée avant de placer l'activité dans un tel état d'arrière-plan, ce qui vous permet d'enregistrer tout état d'instance dynamique dans votre activité dans le donnéBundle
, pour être reçu ultérieurementonCreate(Bundle)
si l'activité doit être recréée.Notez qu'il est important d'enregistrer les données persistantes au
onPause()
lieu deonSaveInstanceState(Bundle)
car ces dernières ne font pas partie des rappels du cycle de vie, elles ne seront donc pas appelées dans toutes les situations comme décrit dans sa documentation.Je voudrais ajouter quelques méthodes supplémentaires. Celles-ci ne sont pas répertoriées comme méthodes de cycle de vie, mais elles seront appelées pendant le cycle de vie en fonction de certaines conditions. Selon vos besoins, vous devrez peut-être implémenter ces méthodes dans votre application pour une gestion appropriée de l'état.
Mon code d'application en utilisant toutes ces méthodes:
Activité de connexion:
sortie: (avant pause)
sortie: (après reprise de la pause)
Notez que cela
onPostResume()
est invoqué même s'il n'est pas cité comme méthode du cycle de vie.la source
Je lance quelques journaux selon les réponses ci-dessus et voici la sortie:
Activité de démarrage
Arrêt de l'activité
À mon avis personnel, seulement deux sont nécessaires sur Start et onStop.
onResume semble être dans chaque cas de retour, et onPause dans chaque cas de départ (sauf pour fermer l'application).
la source