2016-01-07 5 views
5

Ниже приведен фрагмент кода, который я использую в моем проекте, чтобы запланировать задачуAndroid Таймер Расписание

mTimer = new Timer(); 
mTimer.schedule(new TimerTask() { 

@Override 
public void run() { 
    //Do Something 
} 

}, interval, interval); 

Это прекрасно работает. Я получаю событие после указанного интервала. Но это не может отправить какое-либо событие, если дата установлена ​​меньше текущей из настроек.

Кто-нибудь знает, почему это происходит?

+0

Задайте свой вопрос –

+0

, если установлен таймер, а дата изменена с установок на более низкую, чем текущая дата, она не может дать обратный вызов – Neji

+0

, но почему таймер должен работать ниже текущей даты? Почему бы вам просто отключить выбор даты меньше текущей даты? –

ответ

4

Timer сбой при изменении системных часов, потому что it's based on System.currentTimeMillis(), которая не является монотонной.

Timer не является классом Android. Это Java-класс, который существует в Android API для поддержки существующих не-Android-библиотек. Почти всегда плохая идея использовать Timer в новом Android-коде. Используйте события Handler для событий времени, которые происходят в течение всего срока действия ваших приложений или служб. Handler is based on SystemClock.uptimeMillis(), который является монотонным. Используйте события Alarm для событий, которые должны произойти, даже если ваше приложение не запущено.

+0

Отлично !!, только то, что мне нужно. Я уже решил проблему с помощью обработчика, но было любопытно найти, что пошло не так, когда используется таймер на первом месте! :) – Neji

0

Используйте этот код .. это поможет вам ..

Timer t; 
seconds = 10; 

public void startTimer() { 
     t = new Timer(); 
     //Set the schedule function and rate 
     t.scheduleAtFixedRate(new TimerTask() { 

      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         if (seconds == 0) { 
          t.cancel(); 
          seconds = 10; 
         // DO SOMETHING HERE AFTER 10 SECONDS 
         Toast.makeText(this,"Time up",Toast.LENGTH_SHORT).show(); 
         } 
         seconds -= 1; 
        } 
       }); 
      } 
     }, 0, 1000); 
    } 
+0

Мне нужна причина, почему он не работает, когда я меняю дату на более низкую, чем текущая – Neji

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

  • Нет связанных вопросов^_^