Расписание таймера Android

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

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

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

}, interval, interval);

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

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

2 ответа

Решение

Timer не удается при изменении системных часов, потому что он основан наSystem.currentTimeMillis(), что не является монотонным.

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

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

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);
    }
Другие вопросы по тегам