2016-07-29 2 views
1

timer.cancel() 메서드를 호출 한 후 TimerTask가 한 번 더 실행됩니다. stopBusTimer() 메서드를 호출 한 후 TimerMethod를 실행하지 않아도됩니다.timer.cancel() 메서드를 호출 한 후 TimerTask가 한 번 더 실행됩니다.

누군가가 왜 그런지 설명 할 수 있습니까?

busTimer = new Timer(); 
    busTimer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
      TimerMethod(mSelectedRoute); 
     } 
    }, 0, Consts.BUS_TIMER_INTERVAL); 


private void stopBusTimer() { 
    if (busTimer != null) { 
     busTimer.cancel(); 
     busTimer.purge();  
     busTimer = null; 
     Log.v(LOG_TAG, "stop BusTimer"); 
    } 
} 

답변

3

cancel 방법은 다음의 모든 실행을 중지하지만 현재의 것입니다. 메소드 실행에 오랜 시간이 걸리는 경우 cancel으로 호출 할 때 메소드가 이미 실행되기 시작했습니다.

이 메서드가 실행되지 않도록하는 가장 좋은 방법은을 호출하는 것입니다. run() 함수 내에서 cancel을 호출하십시오.

+0

답변 해 주셔서 감사합니다. 나는 그것이 어떻게 작동 하는지를 이해했다. 이제 run() 함수 내부로 보내는 httprequest를 취소하는 방법을 알아야합니다. –

관련 문제