2011-11-28 84 views
1

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

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秒后执行。

+0

没有太多的经验,这些,但我想你已经检查了可运行的代码定义ISN不会跑两次? – Genesis

+0

您发布的代码似乎是正确的,不知道您在哪里运行代码,因此无法弄清楚发生了什么。作为@gwa说, – gwa

+0

,我补充说,你应该确保如果你没有添加你的代码源的日志somwhere – Houcine

回答

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

}