Расписание таймера 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);
}