Zoeken…


Opmerkingen

Een handler kan eenvoudig worden gebruikt om code na een vertraagde hoeveelheid tijd uit te voeren. Het is ook handig voor het na een bepaalde tijd herhaaldelijk uitvoeren van code door de methode Handler.postDelayed () opnieuw aan te roepen vanuit de methode run () van Runnable.

Een handler gebruiken om code na een vertraagde hoeveelheid tijd uit te voeren

Code uitvoeren na 1,5 seconden:

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

Elke 1 seconde herhaaldelijk code uitvoeren:

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 en communicatie tussen threads

Zoals Handler s worden gebruikt voor het verzenden Message s en Runnable s naar een thread berichtenwachtrij het is eenvoudig te implementeren event based communicatie tussen meerdere threads. Elke thread met een Looper kan berichten ontvangen en verwerken. Een HandlerThread is een draad die een dergelijke Looper implementeert, bijvoorbeeld de HandlerThread (UI-draad) implementeert de functies van een HandlerThread .

Een handler maken voor de huidige thread

Handler handler = new Handler();

Een handler maken voor de hoofdthread (UI-thread)

Handler handler = new Handler(Looper.getMainLooper());

Stuur een Runnable van een andere thread naar de hoofdthread

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();

Een Handler maken voor een andere HandlerThread en er gebeurtenissen naartoe verzenden

// 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
    }
});

Stop de uitvoering van de handler

Om de uitvoering van de Handler te stoppen, verwijdert u de callback die eraan is bevestigd met behulp van de uitvoerbare ren die erin zit:

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);
}

Gebruik Handler om een timer te maken (vergelijkbaar met javax.swing.Timer)

Dit kan handig zijn als je een spel schrijft of iets dat om de paar seconden een stukje code moet uitvoeren.

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 ();
    }
}

Voorbeeld gebruik:

Timer timer = new Timer(new Runnable() {
    public void run() {
        System.out.println("Hello");
    }
}, 1000, true)

Deze code drukt elke seconde "Hallo" af.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow