处理程序 - postDelayed执行两次

时间:2011-11-28 17:47:18

标签: java android scheduled-tasks handler postdelayed

当我使用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秒后执行。

1 个答案:

答案 0 :(得分: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;
}   

}