2016-04-12 2 views
1

по какой-то причине мой таймер работает только один раз:Мой TimerTask не работает

Код:

int i = 0; 
private void startTimer() { 


    final Timer timer = new Timer(); 
    final TimerTask task = new TimerTask() { 
     @Override 
     public void run() { 

      Log.d("DTAG","K1"); 

      if(preferences.getBoolean(IS_RUNNING_KEY, false)) 
      { 
       Log.d("DTAG","K2"); 
       final int k = i++; 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         timeCounter.setText(""+k); 
         Log.d("DTAG","K: "+k); 
        } 
       }); 
      } else { 

       Log.d("DTAG","K3"); 
       timer.cancel(); 
       timer.purge(); 

      } 
     } 
    }; 

    timer.schedule(task, 1000); 

} 

Log:

04-12 16:47:32.333 3079-3684/com.michlind.nanytime D/DTAG: K1 
04-12 16:47:32.334 3079-3684/com.michlind.nanytime D/DTAG: K2 
04-12 16:47:32.338 3079-3079/com.michlind.nanytime D/DTAG: K: 0 
+0

в API описания для графика (задачи, 1000) является : «Запланировать задачу для одного выполнения» – Opiatefuchs

ответ

4

Это ожидаемое поведение schedule(TimerTask, long). Из документации

Запланировать задачу для однократного выполнения после указанной задержки.

Попробуйте вместо этого использовать scheduleAtFixedRate.

timer.scheduleAtFixedRate(task, 0, 1000); 

вы можете прочитать больше here

1

Вы должны вызвать график метод с двумя Params. Во-первых для того, сколько он должен ждать, чтобы начать, второй интервал между выполнением:

// schedule the timer, after the first 1000ms the TimerTask will run every 1s 
timer.schedule(timerTask, 1000, 1000); // 
1

Может попробовать чтение документации, чтобы понять это лучше Timer

Функция используется

Timer.schedule(TimerTask, long) 

Запланировать задачу для одиночного выполнения после указанной задержки.

Использование

Timer.scheduleAtFixedRate (TimerTask task, long delay, long period) 

для планирования задач для повторного выполнения с фиксированной ставкой после определенной задержки прошло, то есть в вашем случае

timer.schedule(task, 0, 1000); 
Смежные вопросы