web-dev-qa-db-fra.com

Android L'activité onDestroy () n'est pas toujours appelée et si elle est appelée, seule une partie du code est exécutée

onDestroy () n'est pas toujours appelé. S'il est appelé, seule une partie du code est exécutée.
Et la plupart du temps dans LogCat, je ne vois que le message "gps state on destroy called first". Pourquoi donc?

protected void onDestroy(){
    super.onDestroy();
    Log.d("on destroy called", "gps state on destroy called first");

    editor.putBoolean("gpsOn", false);
    Log.d("on destroy called", "gps state on destroy called second");
    editor.commit();

    Log.d("on destroy called", "gps state on destroy called third");
    stopRouteTracking();
    Log.d("on destroy called", "gps state on destroy called  fourth");      





}
23
ksu

Regarde ça:

Activité OnDestroy jamais appelée?

Et ça:

http://developer.Android.com/reference/Android/app/Activity.html#onDestroy%28%29

Fondamentalement, il n'y a jamais de garantie que onDestroy() sera appelée, et dans certains cas, des processus tels que votre application seront tués directement, contournant de toute façon l'appel de méthode.

14
Chris

Dans la Android ici , vous pouvez voir que -

pour les méthodes marquées comme pouvant être supprimées, après le retour de cette méthode, le processus hébergeant l'activité peut être supprimé 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 méthode onPause () pour écrire toutes les données persistantes (telles que les modifications utilisateur) dans le stockage.

et onStop () et onDestroy () sont tous deux marqués comme pouvant être tués.

Cela peut être la raison pour laquelle seule une partie du code écrit dans onDestroy () est appelée car le processus peut être détruit à tout moment après avoir exécuté onStop ().

8
Karan

@ La réponse de Chris est correcte, mais votre problème où seule une partie de votre code est appelée peut survenir lors de l'appel à super.onDestroy() avant d'appeler votre code. super.onDestroy() doit être appelé à la fin car votre code sera alors appelé avant d'être détruit.

0
HaydenKai