Невозможно запустить таймер в службе в Android - PullRequest
3 голосов
/ 03 марта 2012

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

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 с намерением {cmp = mt.android.app / .BkgService}: java.lang.IllegalStateException: таймер был отменен

Буду очень признателен, если кто-нибудь сможет пролить свет на это ...

1 Ответ

14 голосов
/ 03 марта 2012

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

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

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

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

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

private void StartServUpdateTask() {

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

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...