2012-03-03 2 views
3

Я не знаю, что происходит ... Я не могу запустить таймер в моем сервисе. После кодаНевозможно запустить таймер в службе в android

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: Таймер был отменен

Я был бы очень признателен, если кто-то может пролить некоторый свет на это ...

+0

Если вы #cancel таймера вы должны создать новый экземпляр, если вы хотите использовать его снова. Первое, что вы делаете в своей «StartServUpdateTask», - это убить таймер и сделать его бесполезным. – Jens

ответ

14

От Javadoc для Timer.cancel():

После того, как таймер был прекращен, его выполнение потока заканчивается изящно, и не более на нем могут быть запланированы задачи.

Из Javadoc для Timer.scheduleAtFixedRate():

Броски: IllegalStateException - если задача уже была запланирована или отменена, таймер был отменен, или таймер поток прекращается.

The Timer аннулируется сразу: вам нужно создать новый экземпляр:

private void StartServUpdateTask() { 

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

    ... 
} 
Смежные вопросы