2011-11-28 357 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; 
} 

}