2010-09-22 23 views
0

J'essaie de comprendre le tutoriel de test d'activité sur le site Android. L'un des tests définit un spinner dans l'exemple SpinnerActivity, force une pause, réinitialise le spinner, force la reprise, puis vérifie que l'application a correctement restauré l'état. J'ai collé le code pertinent au bas de cette question pour référence.L'exemple de test d'activité Android a des attentes OnPause déroutantes

Je suis très confus pourquoi la personne qui écrit le test pense que le spinner pourrait avoir été corrompu entre OnPause() et OnResume(). Est-ce parce que le spinner aurait pu être réutilisé dans une activité ultérieure et a donc perdu son état? C'est la seule explication raisonnable à laquelle je puisse penser. Je suis préoccupé par la préservation des activités non-widget de mon application telles que les chaînes, les ints, etc. Elles sont initialisées pendant OnCreate et ne seront pas modifiées par l'utilisateur. Par conséquent, je ne vois aucune raison de les enregistrer pendant OnPause, car même si le système d'exploitation met fin à l'activité après une pause, le OnCreate() réinitialisera ces membres.

Est-il sûr alors de supposer que ces membres non-widget ne seront pas lésés lors de la pause (en supposant que l'application éventuellement reprise?)

public void testStatePause() { 
    Instrumentation mInstr = this.getInstrumentation(); 
    mActivity.setSpinnerPosition(TEST_STATE_PAUSE_POSITION); 
    mActivity.setSpinnerSelection(TEST_STATE_PAUSE_SELECTION); 
    mInstr.callActivityOnPause(mActivity);   
    mActivity.setSpinnerPosition(0); 
    mActivity.setSpinnerSelection(""); 
    mInstr.callActivityOnResume(mActivity); 
    int currentPosition = mActivity.getSpinnerPosition(); 
    String currentSelection = mActivity.getSpinnerSelection(); 
    assertEquals(TEST_STATE_PAUSE_POSITION,currentPosition); 
    assertEquals(TEST_STATE_PAUSE_SELECTION,currentSelection); 
}   

Répondre

1

La raison probable est que votre application peut être tué quand dans un état en pause. Prenez cet exemple:

  1. onCreate - on crée un 5
  2. utilisateur sélectionne 3
  3. utilisateur quitte l'activité, l'activité en pause
  4. Android supprime l'activité b/c il a besoin de ressources
  5. utilisateur retourne à l'activité
  6. onCreate est appelé - initialisé à 5
  7. OnResume est appelé - Voit qu'il y a des données enregistrées, la valeur des résultats à 3
+0

Je pense que ma confusion provient du fait que je m'attendrais à l'étape 7 du comportement couvert à l'étape 6 dans OnCreate(). Si l'activité était terminée, OnResume() ne serait jamais appelé sans un appel OnCreate() préalable, n'est-ce pas? Je ne vois pas la valeur d'encourir ce contexte typiquement inutile de restauration de surcharge dans OnResume(), quand il pourrait être manipulé seulement si nécessaire dans OnCreate(). Suis-je en train de mal comprendre quelque chose? –

+0

Vous avez raison, je ne pense pas qu'il y ait une raison pour laquelle vous ne pouviez pas gérer cela dans onCreate. Vous devez cependant l'enregistrer dans onPause. –