2017-03-14 3 views
-4

Ich möchte mein Thread Verzögerungen von gleicher Zeit erstellen und einen Toast nach jedem Zeitblock generieren. Ich habe versucht, den folgenden Code, aber es schließt meine Anwendung, sobald ich die Taste drücken:Starten eines Threads schließt meine Android-Anwendung

@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

Welchen Fehler bekommen Sie? –

Antwort

0

Die Sache ist, Sie können nicht auf Ui-Element in einem nicht-Ui-Thread zugreifen. Sie müssen also eine Laufzeitausnahme erhalten. Sie können runOnUi() oder einen Handler verwenden, um dies im Hauptthread zu tun. Dabei ist runOnUi() eine Methode der Aktivitätsklasse und A Handler ermöglicht das Senden und Verarbeiten von Message- und Runnable-Objekten, die der MessageQueue eines Threads zugeordnet sind.

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

Oder Sie verwenden Handler

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

So stellen Sie sicher, dass, wenn Sie einen neuen Handler erstellen, es an den Thread/Nachrichtenwarteschlange des Threads gebunden ist, das es schafft. Sie müssen es also nicht innerhalb eines Nicht-Ui-Threads erstellen.

0

Sie erstellen einen anderen Thread in Ihrer Benutzeroberfläche oder Hauptthread kann so nicht UI hier drucken oder aktualisieren, so dass Sie Toast drucken müssen Nachricht im UI-Thread wie folgende Weg innerhalb in Ihrem Thread,

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 
Verwandte Themen