2011-04-11 4 views
1

Dans mon activité principale, sous onStop, j'ai défini myVar = true. Dans onResume, je vérifie si myVar = true et fais quelque chose.onStop n'est pas appelé ... Bouton Accueil appuyé

Si vous appuyez sur le bouton principal pendant que vous effectuez l'activité principale et que vous le lancez à nouveau depuis l'écran d'accueil/le tiroir de l'application, cela fonctionne correctement. Si vous appuyez sur le bouton principal lors d'une autre activité et que vous le lancez à nouveau depuis l'écran d'accueil/le tiroir d'applications, l'activité principale apparaît: clearTaskOnLaunch = "true" défini sur mon activité principale android: finishOnTaskLaunch = "true" sur mes autres activités. Cependant, il ne semble pas qu'il ait été activé dans l'activité principale lorsque le bouton Accueil a été enfoncé.

Je commence les autres activités pour résultat. Si le code de résultat = result_ok ou result_canceled, je mets myVar = false. Mais ... si le bouton d'accueil est pressé, il ne devrait pas être en train de définir les résultats et de faire le onActivityResult.

Une idée de comment résoudre ce problème?

Edit:

above onCreate.. I set startNew = true; 
@Override 
    public void onStop() { 
     super.onStop(); 
     startNew = true; 
    } 

    @Override 
    public void onRestart() { 
     super.onRestart(); 
     if (startNew) { 
      getCurrentDate(0); 
      updateDisplay(); 
      fillData(); 
     } 
    } 

La seule autre référence à startNew, est dans ma méthode de onActivityResult, si une activité qui a été lancé à partir de mon activité principale renvoie soit RESULT_OK ou result_canceled, je mis startNew = false. J'essaie de m'assurer que chaque fois que mon application est lancée depuis l'écran d'accueil/le tiroir de l'application, elle exécute ces 3 méthodes.

Répondre

3

Déplacez-vous à onPause() car, selon la documentation, onStop() dans certaines situations ne sera pas appelé.

+0

Je l'ai changé pour être sûr, mais je n'ai jamais remarqué une différence entre les deux avec ce que je l'utilise. – Roger

+2

Selon la documentation, il n'est pas garanti que l'onStop() soit appelé, mais onPause() l'est. A partir de Honeycomb, cela change ... onStop() sera désormais garanti, mais si vous voulez supporter des périphériques qui exécutent une version antérieure, vous devez coder en conséquence: http://developer.android.com/reference/android/app /Activity.html – BonanzaDriver

+2

Par * what * documentation? –

1

Qu'essayez-vous de faire dans onStop? Généralement, vous voulez le faire dans la méthode onPause. Plus vous vous rapprochez de onDestroy dans le cycle de vie, moins il est probable que la méthode sera appelée avant que votre activité ne soit détruite pour récupérer de la mémoire.

+0

J'ai ajouté plus de détails. Ce que je fais semble fonctionner de la même manière, onStop, onPause. – Roger

+0

Ceci est difficile à mettre en œuvre dans Android en raison de la nature sans état des activités. Vous n'avez intentionnellement aucune connaissance de la source du lancement d'une activité. En tant que tel, le meilleur moyen que j'ai vu pour le faire est de sous-classer l'application, avoir les drapeaux dedans, et mettre à jour les drapeaux de la méthode de finition de la sous-activité. De cette façon, si vous lancez depuis le bac, il n'y a pas de sous-activité et, par conséquent, les drapeaux restent à leur état d'origine. Si la sous-activité se termine, les indicateurs sont définis, et vous savez que vous n'avez pas besoin de recharger vos méthodes. J'espère que cela a du sens. – James

+0

Je n'ai pas nécessairement besoin de savoir d'où il a été lancé. J'ai juste besoin de m'assurer que ces 3 méthodes sont touchées à chaque fois que l'activité principale apparaît, sauf quand elle apparaît à la suite d'une activité que j'ai démarrée pour result, setResult et qui se termine. La seule fois où cela ne fonctionne pas, c'est quand le bouton d'accueil est enfoncé alors qu'il n'est pas dans l'activité principale. – Roger

Questions connexes