3

当我使用 Handler 及其 postDelayed 方法时,run() 方法会执行两次。以下是我的代码的一部分。

Handler deneme = new Handler();

deneme.postDelayed(new Runnable() {

            @Override
            public void run()
            {
                randomOyna();
            }
        }, 1000);

其中 randomOyna 是方法

public void randomOyna()
{   
    Log.v("sonOlarak", "çalıştı");
}

我监控 LogCat 并看到“çalıştı”条目被写入了两次,因此 randomOyna 被调用了两次。该任务是真实安排的,但会在 1 秒和 2 秒后执行。

4

1 回答 1

0

请改用此类并检查它是否已首先运行:

public class Timer {

private java.util.Timer timer;

public synchronized void schedule(final TimerTask timerTask, long delay) {
    stop();
    timer=new java.util.Timer();
    timer.schedule(new TimerTask(){

        @Override
        public void run() {
            timerTask.run();
            timer = null;
        }},delay);
}

public synchronized void stop() {
    if(timer!=null) {
        timer.cancel();
        timer.purge();
        timer = null;
    }   
}

public synchronized void scheduleAtFixedRate(TimerTask timerTask, long delay, long period) {
    stop();
    timer=new java.util.Timer();
    timer.scheduleAtFixedRate(timerTask, delay, period);
}

public boolean isRunning() {
    return timer!=null;
}   

}

于 2011-11-28T21:37:32.747 回答