2012-03-03 4 views
3

무슨 일이 일어나고 있는지 잘 모릅니다 ... 내 서비스에서 타이머를 시작할 수 없습니다. 코드안드로이드 서비스에서 타이머를 시작할 수 없습니다.

public class BkgService extends Service{ 

private Timer ServUpdTimer = new Timer(); 
private static long TMR_INTERVAL = 10*60*1000; 

public void onCreate() { 
    super.onCreate(); 
    StartServUpdateTask(); 
    } 

private void StartServUpdateTask() { 

     if(ServUpdTimer != null) 
      ServUpdTimer.cancel(); 


     ServUpdTimer.scheduleAtFixedRate(new TimerTask() { 
      @Override 
      public void run() { 
      } 
     }, 0, TMR_INTERVAL); 
    } 
} 

에 따라하지만 라인에 도달하면 ServUpdTimer.scheduleAtFixedRate() 나는 다음과 같은 예외

03-03 23 점점 오전 : 32 : 14.851 : E/AndroidRuntime (6083) : java.lang의를 .RuntimeException : 의도와 서비스 [email protected]를 시작할 수 없습니다 { CMP = mt.android.app/.BkgService} : java.lang.IllegalStateException : 타이머가 취소

012 3,516,

사람이에 대한 몇 가지 빛을 던질 수 있다면 매우 감사하게 될 것입니다 ... Timer.cancel()를위한 JavaDoc에서

+0

당신은 타이머를 #cancel 경우 다시 사용하려면 새 인스턴스를 만들어야합니다. 'StartServUpdateTask'에서 제일 먼저 할 일은 타이머를 죽이고 쓸모 없게 만드는 것입니다. – Jens

답변

14

:

타이머가 종료되면

, 그것의 실행 스레드가 정상적으로 종료하고, 더 이상 작업을 예약 할 수 있습니다. Timer.scheduleAtFixedRate()를위한 JavaDoc에서

:

예외 : IllegalStateException이를 - 작업이 이미 예약 또는 취소되었을 경우, 타이머가 삭제되었을 경우, 또는 타이머 스레드가 종료되었습니다.

Timer

은 즉시 취소됩니다 : 새로운 인스턴스를 생성해야합니다

private void StartServUpdateTask() { 

    if(ServUpdTimer != null) 
    { 
     ServUpdTimer.cancel(); 
    } 
    ServUpdTimer = new Timer(); 

    ... 
} 
관련 문제