Müssen Thread erstellen und es für 5 Sekunden ausführen, dann möchte ich aufhören. Wie kann ich das machen?Wie man den asynchronen Thread nach 5 Sekunden der Ausführung stoppt
Ich kann nichts mit Zeit/Millisekunden tun.
THX.
Müssen Thread erstellen und es für 5 Sekunden ausführen, dann möchte ich aufhören. Wie kann ich das machen?Wie man den asynchronen Thread nach 5 Sekunden der Ausführung stoppt
Ich kann nichts mit Zeit/Millisekunden tun.
THX.
Verwenden Sie die AsyncTask.cancel(true)
Methode.
Das sieht vielversprechend aus. Und, kann ich postDelayed verwenden, um meine AsyncTask nach 5 Sekunden abzubrechen? Vielen Dank. – bobetko
Entschuldigung, dass Sie hier nicht klar sind. Hier ist das Beispiel, das ich für synchronen Thread habe. Meine Funktion listen() wird für 5 Sekunden ausgeführt und dann beendet. Listen() ist ein UDP-Listener ...
Problem Ich habe mit diesem Code, es stoppt mein Haupt-Thread (mein Telefon wurde nicht mehr reagiert), bis aufgeführt() beendet seine 5 Sekunden laufen. Ich möchte asynchronen Thread verwenden, um zu vermeiden, dass mein Telefon einfriert. Als ich sagte, dass ich mit der Zeit nichts anfangen kann, versuchte ich zu sagen, dass ich keine Art von Timer in die listen() -Funktion setzen kann, dann die verstrichene Zeit messe und dann nach 5 Sekunden beende. Kann das nicht tun.
Thread t = new Thread() {
public void run() {
try {
listen();
} catch (IOException e) {
Log.d(TAG, "IOException (Discovery) " + e);
e.printStackTrace();
}
synchronized (this) {
notifyAll();
}
}
};
synchronized (t) {
t.start();
try {
t.join(5000); // 5 sec
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Threading in Java ist kooperativ - Sie können nicht gewaltsam einen Thread stoppen. Was Sie tun können, ist es zu stoppen (Aufruf Interrupt() oder eine Flagge zu heben) und dann der Code willig stoppt.
So:
Starten Sie Ihren Worker-Thread ausgeführt wird. Drinnen wiederholt es (innerhalb der Hauptarbeitsschleife) nach isInterrupted()
suchen UND irgendeine InterruptedExceptions
fangen - den Faden in diesem Fall verlassen.
Starten Sie eine TimerTask, die 5 Sekunden lang ausgeführt wird, und rufen Sie anschließend interrupt()
im Worker-Thread auf.
Update: Plakat erklärt, dass er bereits einen funktionierenden Code zu haben, er muss nur asynchron auszuführen, ohne UI blockiert.
Lösung: Setup AsyncTask
und führen Sie Ihren Code innerhalb es ist doInBackground()
Methode.
Gibt es eine Timersteuerung? – johnny
Sie möchten für 5 Sekunden laufen, ohne etwas mit der Zeit zu tun? Was? –