IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Traitement après un startActivity()


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut Traitement après un startActivity()
    Bonjour,

    Il y a quelques temps, j'ai remarqué que le code en dessous d'un startActivity() était tout de même exécuté. Sur le coup, ça m'a un peu surpris, mais je n'y ai pas prêté plus attention car je n'avais normalement rien après. Cependant, aujourd'hui, je me pose des questions.


    Q1 : Est-ce que le code en dessous d'un startActivity() est toujours exécuté ?

    Q2 : S'il y a beaucoup de code après ce startActivity(), est-ce qu'il est toujours intégralement exécuté ou est-ce que le traitement s'arrête à un moment impossible à prédire ?

    Q2.1 : Si l'exécution de ce code "s'arrête en plein milieu" puis que l'application revient plus tard sur cette activité (non terminée), est-ce que le traitement continu en reprenant là où il s'était arrêté ?

    Q2.2 : Si l'exécution de ce code "ne s'arrête pas en plein milieu", comment ça se passe ?

    Q3 : Est-ce que c'est "dangereux" ? Est-ce que ça peut ralentir/bloquer l'activité qui vient de se lancer ? Est-ce le même thread ?



    J'aimerais aussi plus de détails car je "profite" plus ou moins de cette possibilité pour exécuter un peu de code en dessous du startActivity() : rien de très lourd, de termine juste l'activité et toute les précédente lorsque je lance certaines activités.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    		// Prépare l'activité suivante
    		Intent intent= new Intent(this, NextActivity.class);
    		startActivityForResult(intent, REQUEST_CODE);
     
     
    		// Termine cette activité, et la précédente (onActivityResult -> finish)
    		setResult(RESULT_CODE_FINISH);
    		finish(); return;

    Merci d'avance.

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Q1 : Est-ce que le code en dessous d'un startActivity() est toujours exécuté ?
    oui tant que tu ne sors pas de la fonction.

    Q2 : S'il y a beaucoup de code après ce startActivity(), est-ce qu'il est toujours intégralement exécuté ou est-ce que le traitement s'arrête à un moment impossible à prédire ?
    Il faut mieux qu'il n'y est pas beaucoup de code après le startActivity cela risque de poser des problèmes.
    A mon avis tu vas rester bloquer sur ton Activity appelante et l'appelé ne sera jamais affiché. A tester

    Q2.1 : Si l'exécution de ce code "s'arrête en plein milieu" puis que l'application revient plus tard sur cette activité (non terminée), est-ce que le traitement continu en reprenant là où il s'était arrêté ?
    Non, et heureusement. Voir le cycle de vie des Activity.

    Q2.2 : Si l'exécution de ce code "ne s'arrête pas en plein milieu", comment ça se passe ?
    Tout dépends pourquoi elle s’arrête si c'est une erreur ton application va planté. Sinon voir réponse 2 elle ne s'arrête pas tant que tu es dans la fonction (bloquant) à mon avis.

    Q3 : Est-ce que c'est "dangereux" ? Est-ce que ça peut ralentir/bloquer l'activité qui vient de se lancer ? Est-ce le même thread ?
    C'set surtout stupide à mon avis. si tu dois faire des traitement il faut les faire avant l'appel du startActivity ou dans un thread séparé.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Il faut bien comprendre comment fonctionne une UI à base de "messages" (ce qui est le cas de 99% des OS actuels)...

    Un message est envoyé à l'application pour faire quelque chose. Ce message est lu par le thread UI (le "Looper"), et processé par l'activité en cours. Il est alors transformé en un appel de fonction "onXXXXXXXX".

    Quand on fait un startActivity(), on envoie un message d'Intent. Ce message ne pourra être processé que lorsque le Looper en aura fini avec le message en cours (responsable de l’exécution du startActivity d'ailleurs)

    Donc la fonction doit revenir entièrement jusqu'au looper pour que l'activité suivante soit affichée.

    C'est d'ailleurs pour cette raison qu'il est interdit de faire des traitement long dans le thread de l'UI, afin que le looper puisse processer un maximum de messages en un minimum de temps.
    Au bout d'ailleurs de quelques secondes (variable en fonction des téléphones), l'OS va voir que le looper n'a toujours pas repris la main sur une application et va afficher un "ANR" (Application Not Responding: Wait ? Quit ?).
    Franchement, vu de l'utilisateur, cela s'apparente à un crash / bug.

    Comme disait Feanorin, voir le cycle de vie d'une activité pour comprendre les divers messages qui vont se succéder sur une activité (outre les opérations de l'utilisateur bien sur).
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Merci pour vos réponses complètes, j'y vois clair sur le fonctionnement en plus.
    J'en déduis donc que c'est bon pour "seulement" terminer les activités précédentes.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // Prépare l'activité suivante
    		Intent intent= new Intent(this, NextActivity.class);
    		startActivityForResult(intent, REQUEST_CODE);
     
     
    		// Termine cette activité, et la précédente (onActivityResult -> finish)
    		setResult(RESULT_CODE_FINISH);
    		finish(); return;

  5. #5
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Juste par curiosité, quel est l'intérêt de faire un startActivityForResult si derrière tu tue l'activity appelante ?
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  6. #6
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 144
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Bonjour,

    Juste par curiosité, quel est l'intérêt de faire un startActivityForResult si derrière tu tue l'activity appelante ?

    Aucune, on mettra ça sur le compte de la fatigue
    Merci pour la remarque.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. arret d'un traitement apres un if
    Par oliver75 dans le forum Général VBA
    Réponses: 1
    Dernier message: 19/07/2007, 06h50
  2. Réponses: 1
    Dernier message: 11/10/2006, 16h24
  3. Réponses: 6
    Dernier message: 28/08/2006, 17h02
  4. [JSP] Réaliser un traitement après clic sur un lien donné
    Par Ataman dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 25/06/2006, 10h42
  5. [MySQL] Traitement après clique sur bouton submit
    Par H-bil dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 24/05/2006, 13h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo