Android TimerTask аварийно завершает работу при двойном вызове

Я вызываю TimerTask (m_timer) по нажатию кнопки:

m_timer.schedule (m_progressUpdater, 0, 500);

Что запускает мой метод запуска:

    @Override
    public void run() {

        //do some stuff
        progressBar.setProgress(currentProgress);

        if (progress >= 100) {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    CompleteTask();
                }
            });
        }
    }

Я могу вызвать это один раз, и он отлично работает. Когда я вызываю его снова, мое приложение перестает отвечать. Я думаю, что мне нужно отменить задачу в моем методе CompleteTask(), но я пытался отменить как TimerTask, так и Timer, и он все еще падает. Может кто знает в чем проблема?


person Brianide    schedule 18.10.2011    source источник


Ответы (2)


Вы пытались создать новый экземпляр TimerTask для второго вызова? И, кстати, не отменяйте таймер, иначе он отменит всю свою задачу. А что в логе написано?

person romy_ngo    schedule 18.10.2011

Когда вы переназначаете таймер, он выдает:

java.lang.IllegalStateException: TimerTask is scheduled already

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

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

// if you have already started a TimerTask, 
// you must(?) terminate the timer before rescheduling it again.
if(m_timer != null)
    m_timer.cancel();

m_timer = new Timer();
m_progressUpdater = new myTimerTask();
m_timer.schedule(m_progressUpdater, 0, 500);
person Omid    schedule 04.06.2017