web-dev-qa-db-fra.com

Pourquoi implémenter onDestroy () s'il n'est pas garanti d'être appelé?

Selon le Android Activity Lifecycle, le seul rappel garanti à être appelé (si une activité quitte l'état Running, ce qui est généralement attendu) est onPause().

Donc, je dois supposer qu'il existe des scénarios dans lesquels il est logique d'implémenter onStop() et onDestroy() bien qu'ils ne soient pas vraiment garantis à appeler.

Je comprends que onStop() devrait être implémenté lorsqu'il est possible pour une activité de revenir à l'état Running via l'état Stopped (pourquoi le ferait-il au lieu de retourner directement est une question différente).

Mais le besoin de onDestroy(), quand je peux placer tout le nettoyage/économie d'état dans onPause(), n'est pas clair pour moi.

Pouvez-vous décrire une situation d'application réelle (c'est-à-dire pas une analogie avec la conduite d'une voiture, etc.) dans laquelle il serait logique d'implémenter onDestroy()?

47
uTubeFan

onDestroy sera appelé si vous appelez explicitement finish (); toi même.

Votre activité principale appelle startActivityForResult sur une activité de carte.

Carte d'activité avec un LocationListener, l'utilisateur clique sur la carte et sélectionne par exemple un restaurant local.

L'activité définit ensuite des extras à renvoyer à votre activité principale, puis appelle explicitement finish (); sur lui-même et dans onDestroy tue le LocationListener et les autres variables que vous aviez invoquées.

Je viens de le trouver dans la documentation

onDestroy () = Le dernier appel que vous recevez avant que votre activité ne soit détruite. Cela peut se produire soit parce que l'activité se termine (une personne appelée finish (), soit parce que le système détruit temporairement cette instance de l'activité pour économiser de l'espace. Vous pouvez distinguer ces deux scénarios avec la méthode isFinishing ().

25
Blundell

Pouvez-vous décrire une situation d'application réelle (c'est-à-dire pas une analogie avec la conduite d'une voiture, etc.) dans laquelle il serait logique d'implémenter onDestroy ()?

Lorsque vous souhaitez capturer un changement de configuration. Tout est dans le SDK: http://developer.Android.com/reference/Android/app/Activity.html

3
user146043