2013-10-29 4 views
3

안녕하세요, 저는 TCP 소켓에서 일하고 있습니다. 1 초마다 데이터를 읽을 수 있습니다. 그것을 달성하기 위해 아래 코드와 같이 TimerTask를 사용했습니다.안드로이드에서 AsyncTask에 대한 timerTask를 취소하는 방법

Handler handler = new Handler(); 
Timer timer = new Timer(); 

TimerTask doAsynchronousTask = new TimerTask() { 

     @Override 
     public void run() { 
      finalizer = new Runnable() { 
       public void run() { 
        try { 
         if (navBool) { 
          runOnUiThread(new Runnable() { 
           public void run() { 
            new RetriveStock().execute(); // AsyncTask. 
           } 
          }); 

         } 
        } catch (Exception e) { 
        } 
       } 
      }; 
      handler.post(finalizer); 
     } 
    }; 
timer.schedule(doAsynchronousTask, 0, 1000); 

timer.cancel(); 
timer = null; 
handler.removeCallbacks(finalizer); 

나는 코드 사용이 타이머를 취소하는

그러나 타이머를 취소되지 않습니다. 나는 이유를 모른다.

답변

2

timer.cancel()을 호출하는 대신 해당 타이머에 할당 된 작업 (귀하의 경우 doAsynchronousTask)을 취소해야합니다. 하나의 타이머에 여러 TimerTask를 할당 할 수 있으므로 timer.cancel()을 호출해도 현재 실행중인 작업을 방해하지 않습니다. Timer JavaDoc에서

:

public void cancel()

은 현재 예약 된 작업을 파기 해,이 타이머를 종료합니다. 은 현재 실행중인 작업을 방해하지 않습니다 (있는 경우). 타이머가 종료되면 실행 스레드는 정상적으로 종료되고 이며 더 이상의 작업이 예약되지 않습니다.

+0

어떻게 현재 실행중인 작업을 취소 할 수 있습니까? – user2085965

+0

귀하의 경우,'doAsynchronousTask.cancel (true)'. ('true' 매개 변수는'cancel()'에 대한 호출이 현재 실행중인 스레드를 선점 할 수 있음을 나타냅니다). –

관련 문제