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.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow