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 :

Fin d'exécution d'un Thread


Sujet :

Android

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut Fin d'exécution d'un Thread
    Bonjour,

    Quand je fais un startActivity dans un Thread, une erreur "new Intent undefined" apparait.

    J'ai donc mis ce startActivity dans le OnStop(), pourtant celui-ci ne s'exécute pas (ni un Toast d'ailleurs).

    Comment faire pour exécuter ça à la fin du Thread?

    Merci

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Points : 177
    Points
    177
    Par défaut
    Salut,

    Ton problème vient du fait que startActivity() est une méthode appartenant à la classe Actitivity.
    Donc c'est logique qu'elle ne soit pas référencée dans ton Thread (d'où le undefined) !

    Je ne sais pas comment tu as fait ton design de ton application, mais généralement dans les
    Threads on ne mets que des traitements découplés des activités. Donc faire un startActivity n'est
    pas recommandé à cet endroit là.

    Si tu regardes la signature de startActivity tu verras que la méthode prend en paramètre le context
    (le contexte de l'activité parente en fait). Donc du coup rien ne garantie lorsque tu finies ton Thread
    que ce contexte soit valide !

    Le mieux serait de passer par un Handler qui servirait à notifier ton activité de la fin du Thread et à ce
    moment là tu pourras faire ton traitement (en plus au niveau découplage c'est mieux).

    Je te conseil d'aller lire cet article .

  3. #3
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci je vais me renseigner!

  4. #4
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Même dans le Handler mon startActivity n'est pas défini (surement pour les même raisons).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Handler handler = new Handler() {
       @Override
       public void handleMessage(Message msg) {
          progressBar.incrementProgressBy(33);
          if (progressBar.getProgress() == 99)
             startActivity(new Intent(this, myActivity.class));
          }
    };
    Je ne vois pas comment découpler le Handler de l'activité initiale qui elle connait startActivity? A moins de faire un truc comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Handler handler = new Handler() {
       @Override
       public void handleMessage(Message msg) {
          progressBar.incrementProgressBy(33);
          if (progressBar.getProgress() == 99)
             finish = true;
          }
    };
     
     
    public void lancer() {
        monThread.start();
        while (true) {
           if (finish) {
              startActivity();
              break;
           }
        }
    }
    Mais c'est plutôt lourd et sale non?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    757
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 757
    Points : 968
    Points
    968
    Par défaut
    C'est simple, il faut que tu applique ajoute le nom de ta classe + this avant le startActivity().
    Ex : Si ton activity s'appelle A alors ça devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    A.this.startActivity(...)
    Cependant, vérifie que l'acitivty n'est pas finie, sinon, elle risque de planter. La méthode s'appelle isFinish() je crois.

  6. #6
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci, la bonne syntaxe est finalement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    startActivity(new Intent(MaClasseActuelle.this, MonClasseALancer.class));

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 141
    Points : 177
    Points
    177
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // Dans l'activité	
     
    private Handler handler = new Handler() {
       @Override
       public void handleMessage(Message msg) {
          progressBar.incrementProgressBy(33);
          if (progressBar.getProgress() >= 99)
             this.runOnUiThread(new Runnable() {
                 public void run() {
                   this.startActivity(...);
                 }
             });     
          }
    };
     
    public void lancer() {
        // monThread est une inner class avec la main sur le handle
        monThread.start();
    }

  8. #8
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Merci, quel est l'intérêt ici de lancer l'activité dans un Thread()?

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

Discussions similaires

  1. [Thread] Stopper l'exécution d'un thread brutalement
    Par Razgriz dans le forum Concurrence et multi-thread
    Réponses: 7
    Dernier message: 31/01/2007, 19h55
  2. [POO] Connaître la fin d'exécution d'un fonction
    Par Shandler dans le forum Langage
    Réponses: 4
    Dernier message: 28/01/2007, 18h45
  3. [java.util.Timer]Comment arrêter l'exécution d'un Thread
    Par Invité dans le forum Concurrence et multi-thread
    Réponses: 1
    Dernier message: 07/06/2006, 07h54
  4. [Thread] Connaitre la fin d'execution d'un thread
    Par charmante dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 05/10/2005, 18h57
  5. Attendre la fin d'exécution d'un page en JS
    Par TekP@f dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/08/2005, 15h15

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