无法在android中的服务中启动计时器

时间:2012-03-03 15:28:07

标签: java android service timer

我不知道发生了什么错误......我无法在我的服务中启动计时器。遵循代码

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:无法启动服务   mt.android.app.BkgService@40544838 with Intent {   cmp = mt.android.app / .BkgService}:java.lang.IllegalStateException:   计时器被取消

如果有人能对此有所了解,我将非常感激......

1 个答案:

答案 0 :(得分:14)

来自Timer.cancel()的Javadoc:

  

一旦计时器终止,其执行线程将正常终止,并且不再安排任何任务。

来自Timer.scheduleAtFixedRate()的Javadoc:

  

抛出:IllegalStateException - 如果任务已经被调度或取消,计时器被取消,或计时器线程被终止。

Timer会立即取消:您需要创建一个新实例:

private void StartServUpdateTask() {

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

    ...
}