2017-03-14 1 views
-4

Je veux que mon thread crée des retards d'un temps égal et génère un toast après chaque bloc de temps. J'ai essayé le code suivant, mais il ferme ma demande dès que j'appuie sur le bouton:Démarrage d'un thread ferme mon application android

@Override 
    public void onClick(View v) { 
     new Thread() { 
      @Override 
      public void run() { 
       try 
       { 
        Toast.makeText(context, "hiiiiiiiiiiiiiii", Toast.LENGTH_SHORT).show(); 
        sleep(5000); 
        Toast.makeText(context, "hiiiiiiiiiiiiiii", Toast.LENGTH_SHORT).show(); 
        sleep(5000); 
        Toast.makeText(context, "hiiiiiiiiiiiiiii", Toast.LENGTH_SHORT).show(); 
       } catch (Exception e) { 
        Toast.makeText(context, "Exception", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }.start(); 
+0

Quelle erreur obtenez-vous? –

Répondre

0

La chose est que vous ne pouvez pas accéder à l'élément Ui dans un thread non Ui. Vous devez donc obtenir une exception d'exécution. Vous pouvez utiliser runOnUi() ou un gestionnaire pour le faire sur le thread principal. Où runOnUi() est une méthode de classe Activity et un gestionnaire vous permet d'envoyer et de traiter des objets Message et Runnable associés à MessageQueue d'un thread.

runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show(); 
     } 
    }); 

Ou vous pouvez utiliser Gestionnaire

new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show(); 
     } 
    }); 

Assurez-vous que lorsque vous créez un nouveau gestionnaire, il est lié à la file d'attente fil/message du fil qui est crée. Vous ne devez donc pas le créer dans un thread non-Ui.

0

Vous créez un autre thread dans votre interface utilisateur ou thread principal ne peut donc pas imprimer ou mettre à jour l'interface utilisateur ici si vous avez besoin d'imprimer des toasts message dans thread d'interface utilisateur comme suit dans votre chemin à l'intérieur du fil,

ActivityMain.this.runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       Toast.makeText(ActivityMain.this,"Message",Toast.LENGTH_LONG).show(); 
      } 
     }); 
//ActivityMain is the name of activity in which you are working