Sök…


Anmärkningar

En hanterare kan lätt användas för att köra kod efter en försenad tidsperiod. Det är också användbart för att köra koder upprepade gånger efter en viss tid genom att kalla metoden Handler.postDelayed () igen från Runnable's run () -metod.

Använda en hanterare för att köra kod efter en försenad tidsperiod

Utför kod efter 1,5 sekunder:

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

Utför kod upprepade gånger var 1 sekund:

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

HandlerTreads och kommunikation mellan trådar

Eftersom Handler används för att skicka Message och Runnable s till en trådens meddelandekö är det enkelt att implementera händelsebaserad kommunikation mellan flera trådar. Varje tråd som har en Looper kan ta emot och behandla meddelanden. En HandlerThread är en tråd som implementerar en sådan Looper , till exempel huvudtråden (UI Thread) implementerar funktionerna i en HandlerThread .

Skapa en hanterare för den aktuella tråden

Handler handler = new Handler();

Skapa en hanterare för huvudtråden (UI-tråd)

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

Skicka en körbar från en annan tråd till huvudtråden

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

Skapa en Handler för en annan HandlerTread och skicka händelser till den

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

Stoppa hanteraren från körningen

För att hindra hanteraren från körning, ta bort återuppringningen som är kopplad till den med hjälp av det löpbara som körs inuti det:

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

Använd Handler för att skapa en timer (liknande javax.swing.Timer)

Detta kan vara användbart om du skriver ett spel eller något som behöver köra en kodkod varannan sekund.

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

Exempel på användning:

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

Denna kod kommer att skriva ut "Hej" varje sekund.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow