2011-11-28 2 views
1

핸들러와 그 postDelayed 메소드를 사용할 때 run() 메소드가 두 번 실행됩니다. 아래는 내 코드의 일부입니다. randomOyna이 방법핸들러 - postDelayed가 두 번 실행됩니다.

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

randomOyna가 두 번 호출 될 수 있도록 내가는 로그 캣을 모니터링하고 "çalıştı"항목을 두 번 기록 된 것을 볼 수에게 있습니다

Handler deneme = new Handler(); 

deneme.postDelayed(new Runnable() { 

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

. 이 작업은 올바르게 계획되었지만 1 초에서 2 초 후에 실행됩니다. 먼저 이미 실행중인 경우이 클래스 대신 체크

+0

다음으로 많은 경험이 없어하지만 난 당신이 실행 가능한 정의 코드 ISN을 확인했다고 가정 두 번 뛰는거야? – Genesis

+0

당신이 게시 한 코드가 올바른 것 같아요, 그 코드를 어디에서 실행하는지 알지 못해서 무슨 일이 일어나고 있는지 파악할 수 없습니다. – gwa

+0

@gwa가 말했듯이, 나는 코드 소스에 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; 
} 

가}

관련 문제