Android-sleep() ohne zu blockieren UI
Für mein neues Android-Anwendung, die ich brauche eine Funktion, die timeout-meine Bewerbung für 3 Sekunden. Ich habe versucht, die Funktion "sleep()" wie folgt aus:
seekBar1.setProgress(50); //Set something for my SeekBar
try{
Thread.sleep(3000); //Wait for 3 Seconds
} catch (Exception e){
System.out.println("Error: "+e); //Catch the exception
}
button.setEnabled(true); //Enable my button
Scheint es zu funktionieren, aber wenn ich die Anwendung ausführen, es macht es so: Warten Sie 3 Sekunden, setzen Sie den Fortschritt und die Schaltfläche "aktivieren". Ich möchte den ersten, um die Fortschritte und dann warten Sie 3 Sekunden und nur dann, um die Schaltfläche zu aktivieren.
Ist "sleep()" für die richtige für meinen verwenden, oder was kann ich anderes tun, dass meine Anwendung nicht in der richtigen Reihenfolge?
- Sie können handler
new Handler().postDelayed(new Runnable() { @Override public void run() { button.setEnable(true); } },3000);
- Wenn es für Sie arbeitet, es einfach verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
postDelayed()
Methode wie diese:Sollten Sie nicht immer blockieren der ui-thread mit einem schlafen. Ihr ok zum schlafen in einem anderen thread, aber selbst dann sollte es vermieden werden. Der richtige Weg dies zu tun ist, zu posten, ein Thread zu einem Handler. Dann legen Sie, was auch immer code, den Sie ausführen möchten, nachdem die Verzögerung in der run () - Methode der Runnable.
Können Sie definieren eine
Handle
in Ihre Tätigkeit und die VerwendungHandle.postDelayed()
von der TätigkeitonCreate()
so erhalten Sie eine Nachricht auf, dass der Griff in 3 Sekunden. Nach Erhalt können Sie die Schaltfläche aktivieren.Können Sie das gleiche tun mit
AsyncTask
wo indoInBackground()
Sie schlafen für 3 Sek. Dann inonPostExecute()
Sie die Schaltfläche aktivieren.Verwenden-Objekt der Handler-Klasse, und verwenden Sie die Methode handler.postDelayed(thread,Zeit).Verwenden Sie nicht sleep() blockiert das ui-thread.