Android
Handler
Suche…
Bemerkungen
Ein Handler kann leicht verwendet werden, um Code nach einer verzögerten Zeit auszuführen. Es ist auch nützlich, um Code nach einer bestimmten Zeit wiederholt auszuführen, indem die Handler.postDelayed () - Methode erneut aus der run () - Methode von Runnable aufgerufen wird.
Verwenden eines Handlers, um Code nach einer verzögerten Zeit auszuführen
Code nach 1,5 Sekunden ausführen:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//The code you want to run after the time is up
}
}, 1500); //the time you want to delay in milliseconds
Code wird alle 1 Sekunde wiederholt ausgeführt:
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
handler.postDelayed(this, 1000);
}
}, 1000); //the time you want to delay in milliseconds
HandlerThreads und Kommunikation zwischen Threads
Als Handler
s verwendet werden , senden Message
s und Runnable
s auf das Thema der Nachricht Warteschlange ist es einfach , ereignisbasierte Kommunikation zwischen mehreren Threads zu implementieren. Jeder Thread, der über einen Looper
verfügt, kann Nachrichten empfangen und verarbeiten. Ein HandlerThread
ist ein Thread, der einen solchen Looper
implementiert. Beispielsweise implementiert der Haupt-Thread (UI-Thread) die Funktionen eines HandlerThread
.
Einen Handler für den aktuellen Thread erstellen
Handler handler = new Handler();
Handler für den Haupt-Thread erstellen (UI-Thread)
Handler handler = new Handler(Looper.getMainLooper());
Senden Sie eine ausführbare Datei aus einem anderen Thread an den Haupt-Thread
new Thread(new Runnable() {
public void run() {
// this is executed on another Thread
// create a Handler associated with the main Thread
Handler handler = new Handler(Looper.getMainLooper());
// post a Runnable to the main Thread
handler.post(new Runnable() {
public void run() {
// this is executed on the main Thread
}
});
}
}).start();
Erstellen eines Handlers für ein anderes HandlerThread und Senden von Ereignissen an ihn
// create another Thread
HandlerThread otherThread = new HandlerThread("name");
// create a Handler associated with the other Thread
Handler handler = new Handler(otherThread.getLooper());
// post an event to the other Thread
handler.post(new Runnable() {
public void run() {
// this is executed on the other Thread
}
});
Stoppen Sie den Handler von der Ausführung ab
Um die Ausführung des Handlers zu stoppen, entfernen Sie den an ihn gebundenen Rückruf mithilfe der ausführbaren ausführbaren Instanz.
Runnable my_runnable = new Runnable() {
@Override
public void run() {
// your code here
}
};
public Handler handler = new Handler(); // use 'new Handler(Looper.getMainLooper());' if you want this handler to control something in the UI
// to start the handler
public void start() {
handler.postDelayed(my_runnable, 10000);
}
// to stop the handler
public void stop() {
handler.removeCallbacks(my_runnable);
}
// to reset the handler
public void restart() {
handler.removeCallbacks(my_runnable);
handler.postDelayed(my_runnable, 10000);
}
Verwenden Sie den Handler, um einen Timer zu erstellen (ähnlich javax.swing.Timer).
Dies kann nützlich sein, wenn Sie ein Spiel schreiben oder etwas, das alle paar Sekunden einen Code ausführen muss.
import android.os.Handler;
public class Timer {
private Handler handler;
private boolean paused;
private int interval;
private Runnable task = new Runnable () {
@Override
public void run() {
if (!paused) {
runnable.run ();
Timer.this.handler.postDelayed (this, interval);
}
}
};
private Runnable runnable;
public int getInterval() {
return interval;
}
public void setInterval(int interval) {
this.interval = interval;
}
public void startTimer () {
paused = false;
handler.postDelayed (task, interval);
}
public void stopTimer () {
paused = true;
}
public Timer (Runnable runnable, int interval, boolean started) {
handler = new Handler ();
this.runnable = runnable;
this.interval = interval;
if (started)
startTimer ();
}
}
Verwendungsbeispiel:
Timer timer = new Timer(new Runnable() {
public void run() {
System.out.println("Hello");
}
}, 1000, true)
Dieser Code gibt jede Sekunde "Hallo" aus.