Différence entre onStart () et onResume()

Je ne peux pas obtenir la signification de onStart() état de transition. La méthode onResume() est toujours appelée après onStart(). Pourquoi ne peut-il pas être le onResume() est invoqué après les méthodes onRestart() et onCreate() excluant simplement onStart()? Quel est son but?

Pourquoi ne pouvons-nous pas vivre sans onStart(). Je le considère toujours comme redondant (probablement parce que je ne comprends pas complètement sa signification).

160
demandé sur Deepzz 2010-12-29 14:19:21

11 réponses

Pourquoi ne peut-il pas être que onResume() est invoqué après les méthodes onRestart() et onCreate () excluant simplement onStart ()? Quel est son but?

OK, comme ma première réponse était assez longue, Je ne l'étendrai pas plus loin, alors essayons ceci...

public DriveToWorkActivity extends Activity
    implements onReachedGroceryStoreListener {
}

public GroceryStoreActivity extends Activity {}

Veuillez noter: j'ai délibérément omis les appels à des choses comme super.onCreate(...) etc. C'est du pseudo-code alors donnez-moi une licence artistique ici. ;)

Les méthodes pour DriveToWorkActivity suivent...

protected void onCreate(...) {
    openGarageDoor();
    unlockCarAndGetIn();
    closeCarDoorAndPutOnSeatBelt();
    putKeyInIgnition();
}

protected void onStart() {
    startEngine();
    changeRadioStation();
    switchOnLightsIfNeeded();
    switchOnWipersIfNeeded();
}

protected void onResume() {
    applyFootbrake();
    releaseHandbrake();
    putCarInGear();
    drive();
}

protected void onPause() {
    putCarInNeutral();
    applyHandbrake();
}

protected void onStop() {
    switchEveryThingOff();
    turnOffEngine();
    removeSeatBeltAndGetOutOfCar();
    lockCar();
}

protected void onDestroy() {
    enterOfficeBuilding();
}

protected void onReachedGroceryStore(...) {
    Intent i = new Intent(ACTION_GET_GROCERIES, ...,  this, GroceryStoreActivity.class);
}

protected void onRestart() {
    unlockCarAndGetIn();
    closeDoorAndPutOnSeatBelt();
    putKeyInIgnition();
}

OK, alors c'est un autre long (désolé les gens). Mais voici mon explication...

onResume() est quand je commence à conduire et {[5] } est quand je viens à un arrêt temporaire. Donc, je conduis puis atteindre un feu rouge donc je fais une pause...la lumière passe au vert et je reprend. Un autre feu rouge et je fais une pause, puis Vert donc je reprends. La boucle onPause() -> onResume() -> onPause() -> onResume() est une boucle serrée et se produit plusieurs fois à travers mon voyage.

La boucle d'être arrêté à travers un redémarrage (se préparant à poursuivre mon voyage) à recommencer est peut-être moins commun. Dans un cas, je repère l'épicerie et le GroceryStoreActivity est démarré (forçant Mon DriveToWorkActivity au point de onStop()). Quand je reviens du magasin, je passe par onRestart() et onStart(), puis reprendre mon voyage.

Je pourrais mettre le code qui est dans onStart() dans onCreate() et onRestart() et ne pas prendre la peine de remplacer onStart() mais plus il faut faire entre onCreate() -> onResume() et onRestart() -> onResume(), plus je duplique les choses.

Donc, à requote une fois de plus...

Pourquoi ne peut-il pas être le onResume () est invoqué après les méthodes onRestart() et onCreate () excluant simplement onStart ()?

Si vous ne remplacez pas onStart(), c'est effectivement ce qui se passe. Bien que la onStart() méthode de Activity sera appelé implicitement, l'effet dans votre code est effectivement onCreate() -> onResume() ou onRestart() -> onResume().

278
répondu Squonk 2012-06-12 06:43:50

Réponse courte:

Nous ne pouvons pas vivre sans onStart car c'est l'état où l'activité devient "visible" pour l'utilisateur, mais l'utilisateur ne peut pas "interagir" avec elle mais peut-être parce qu'il se chevauche avec une autre petite boîte de dialogue. Cette capacité à interagir avec l'utilisateur est celle qui différencie onStart et onResume. Pensez-y comme une personne derrière une porte vitrée. Vous pouvez voir la personne mais vous ne pouvez pas interagir (parler / écouter / serrer la main) avec lui. OnResume est comme l'ouvre-porte après que vous pouvez commencer à l'interaction.

De plus onRestart() est le moins compris. Nous pouvons poser la question de savoir pourquoi ne pas aller directement à onStart() ou onResume () après onStop () au lieu de onRestart (). Il devient plus facile à comprendre si nous notons que onRestart () est partiellement équivalent à onCreate () si la partie de création est omise. Fondamentalement, les deux états mènent à onStart () (c'est-à-dire que l'activité devient visible). Donc, les deux états doivent "préparer" les choses à afficher. OnCreate a la responsabilité supplémentaire de "créer" les choses à afficher

Donc, leurs structures de code pourraient s'adapter à quelque chose comme:

onCreate()
{
     createNecessaryObjects();

     prepareObjectsForDisplay();
}


onRestart()
{
     prepareObjectsForDisplay();

}

Toute la confusion est causée puisque Google a choisi des noms Non intuitifs au lieu de quelque chose comme suit:

onCreateAndPrepareToDisplay()   [instead of onCreate() ]
onPrepareToDisplay()            [instead of onRestart() ]
onVisible()                     [instead of onStart() ]
onBeginInteraction()            [instead of onResume() ]
onPauseInteraction()            [instead of onPause() ]
onInvisible()                   [instead of onStop]
onDestroy()                     [no change] 

Le Diagramme D'activité peut être interprété comme suit:

Cycle De Vie De L'Activité Android

125
répondu Nilesh Pawar 2012-07-23 12:55:40

onStart() appelée lorsque l'activité devient visible pour l'utilisateur. onResume() appelé lorsque l'activité commencera à interagir avec l'utilisateur. Vous pouvez faire des choses différentes dans ce cas.

Voir ce lien pour référence.

26
répondu Sergey Glotov 2016-04-14 13:55:59

onResume() est appelé:

  1. après onStart()
  2. lorsque le Activity vient au premier plan.

À Partir de http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle: le texte d'alt

14
répondu Jonas Alves 2015-10-29 10:55:17

Le livre "Bonjour, Android, présentation de la plate-forme de développement Mobile de Google" donne une belle explication du cycle de vie des applications android. Heureusement, ils ont le chapitre particulier en ligne comme un extrait. Voir le graphique à la page 39 http://media.pragprog.com/titles/eband3/concepts.pdf

Par ailleurs, ce livre est fortement recommandé pour les débutants android!

9
répondu Martin Booka Weser 2011-01-06 17:54:39

Un exemple particulièrement fougueux est lorsque vous décidez d'afficher une boîte de dialogue gérée à partir d'une activité en utilisant showDialog(). Si l'utilisateur fait pivoter l'écran alors que la boîte de dialogue est toujours ouverte (nous appelons cela un "changement de configuration"), alors l'activité principale passera par tous les appels de fin de cycle de vie jusqu'à onDestroy(), sera recréée et remontera à travers les cycles de vie. Ce que vous ne pouvez pas attendre cependant, c'est que onCreateDialog() et onPrepareDialog() (les méthodes qui sont appelées lorsque vous faites showDialog() et maintenant à nouveau automatiquement recréer la boîte de dialogue automatiquement car il est géré de dialogue) sont appelés entre onStart() et onResume(). La pointe ici est que la boîte de dialogue ne couvre pas le plein écran et laisse donc une partie de l'activité principale visible. C'est un détail, mais il a de l'importance!

7
répondu pjv 2011-01-08 23:19:31

onStart()

  1. appelé après onCreate (Bundle) ou après onRestart () suivi de onResume().
  2. , vous pouvez enregistrer un BroadcastReceiver dans onStart() pour surveiller les changements cela a un impact sur votre interface utilisateur, vous devez l'Annuler dans onStop ()
  3. Les classes dérivées doivent faire appel à la super classe la mise en œuvre de cette méthode. S'ils ne le font pas, une exception sera jetée.

onResume()

  1. appelé après onRestoreInstanceState(Bundle), onRestart () ou onPause ()
  2. commencez les animations, ouvrez les périphériques d'accès exclusif (tels que la caméra)

onStart() normalement envoi de travail à un thread d'arrière-plan, dont les valeurs de retour sont:

  • START_STICKY {[11] } pour redémarrer automatiquement s'il est tué, pour le garder actif.

  • START_REDELIVER_INTENT pour auto redémarrer et réessayer si le service a été tué avant stopSelf ().

onResume() est appelé par le système d'exploitation après que le périphérique est mis en veille ou après une alerte ou une autre activité enfant à écran partiel laisse une partie de la fenêtre précédente visible, de sorte qu'une méthode doit réinitialiser les champs (dans une structure try avec une capture d'exceptions). Une telle situation ne provoque pas onStop() à être invoqué lorsque l'enfant ferme.

{[2] } est appelé sans onStart() lorsque l'activité reprend du contexte

Pour plus de détails, vous pouvez visiter Android_activity_lifecycle_gotcha et cycle de vie de L'activité

6
répondu IntelliJ Amiya 2015-07-13 13:47:04

onStart() signifie Activity entré dans l'état visible et la mise en page est créée mais ne peut pas interagir avec cette mise en page d'activité.

Resume() signifie Maintenant que vous pouvez faire l'interaction avec la mise en page de l'activité.

4
répondu Abhi 2016-09-15 07:46:31

Notez qu'il y a des choses qui se passent entre les appels à onStart () et onResume (). À savoir, onNewIntent (), que j'ai douloureusement découvert.

Si vous utilisez L'indicateur SINGLE_TOP, et que vous envoyez des données à votre activité, en utilisant intent extras, vous ne pourrez y accéder que dans onNewIntent (), qui s'appelle Après onStart () et avant onResume (). Donc, généralement, vous prendrez les nouvelles données (peut-être seulement modifiées) des extras et les définirez sur certains membres de la classe, ou utilisez setIntent () pour définir la nouvelle intention comme intention d'activité d'origine et traiter les données dans onResume ().

1
répondu Corneliu Dascălu 2012-04-18 15:25:08

Référence à http://developer.android.com/training/basics/activity-lifecycle/starting.html

onResume() appelé juste avant que l'activité ne commence à interagir avec l'utilisateur. À ce stade, l'activité se trouve en haut de la pile d'activités, avec l'entrée de l'utilisateur. Toujours suivi de onPause().

onPause() appelé lorsque le système est sur le point de commencer à reprendre une autre activité. Cette méthode est généralement utilisée pour valider des modifications non enregistrées sur des données persistantes, les choses qui peuvent consommer CPU, et ainsi de suite. Il devrait faire ce qu'il fait très rapidement, car l'activité suivante ne sera pas reprise avant son retour. Suivie de onResume() si l'activité revient à l'avant, ou par onStop() si elle devient invisible pour l'utilisateur.

0
répondu androidwifi 2016-09-15 11:53:43

Espérons une explication simple: -

OnStart () - > appelé lorsque l'activité devient visible, mais peut ne pas être au premier plan (par exemple, un AlertFragment est en haut ou tout autre cas d'utilisation possible).

OnResume() -> appelée lorsque l'activité est au premier plan, ou l'utilisateur peut interagir avec l'Activité.

0
répondu aprofromindia 2018-06-13 12:02:51