2017-08-24 4 views
1

J'ai un LocalBroadcastReceiver et je suis unregistering dans mon ondestroy().OnDestroy est-il appelé uniquement si vous appelez explicitement finish() ?? ou y a-t-il des exceptions?

Maintenant, j'ai lu ondestroy() mentionné dans ces deux réponses SO is-ondestroy-not-always-called et why-implement-ondestroy-if-it-is-not-guaranteed-to-be-called et ainsi que dans Androi Docs que

OnDestroy sera appelée si vous appelez explicitement la fin();

Mais pourquoi, dans mon cas, je ne demande pas finish() mais toujours ondestroy() devient appelé à chaque fois que dans tous mes appareils Android. Toujours selon vous, où sont les cas où ondestroy() ne sont pas appelés.

Aussi, même si Android va tuer mon application (en raison de moins de mémoire) Je ne suis pas à me soucier que Android va tuer mon application tout si le récepteur sera finalement se faire tuer. (Donc, il n'y aura pas de Fuite de mémoire).

Donc pour mon cas d'utilisation quels cas sont là où ondestroy() ne va pas être appelé.

Répondre

2

Mais pourquoi dans mon cas je n'appelle pas finish() mais toujours ondestroy() est appelé à chaque fois dans tous les appareils Android.

L'implémentation par défaut de onBackPressed() — ce qui est déclenché par la touche BACK — appelle finish().

où sont les cas où les ondestroy() ne sont pas appelées.

  1. Si vous avez un accident avec une exception non gérée

  2. Si votre processus est terminé de façon urgente (par exemple, le système a besoin de RAM pour traiter un appel entrant)

  3. Si l'utilisateur clique sur "Forcer l'arrêt" sur l'écran de votre application dans les paramètres

  4. Sur certains appareils, si l'utilisateur met fin à votre processus en utilisant un fabricant fourni Gestionnaire des tâches

Aussi, même si Android va tuer mon application (en raison de moins de mémoire) Je ne suis pas à me soucier que Android va tuer mon application tout si le récepteur sera finalement se faire tuer

Oui, car tout votre processus sera terminé.

+0

Pour le premier cas si mon application tombe en panne alors je ne pense pas que je dois annuler mon récepteur parce que l'application est déjà fermée et lorsque l'utilisateur tape à nouveau, la mémoire sera à nouveau allouée à mon application. –

+0

Pour le second cas est-ce le même que celui que j'ai mentionné à propos de moins de mémoire ou non? –

+0

@SudhanshuGaur: "Pour le premier cas ..."- cela dépend beaucoup de la façon dont votre application traite les exceptions non gérées." Pour le deuxième cas ... "- oui, c'est la partie du scénario que vous avez mentionné à propos d'Android mettant fin à votre processus en raison de la mémoire insuffisante. Android va prendre le temps d'appeler 'onDestroy()' sur vos activités en cours.Pas parfois, il ne sera pas, car il ne peut pas prendre le temps – CommonsWare