Допустим, я хочу выполнять какое-то действие каждые 10 секунд, и не обязательно обновлять представление.
Вопрос в том, что лучше (я имею в виду более эффективное и действенное) использовать таймер с timertask, как здесь:
final Handler handler = new Handler();
TimerTask timertask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
<some task>
}
});
}
};
timer = new Timer();
timer.schedule(timertask, 0, 15000);
}
или просто обработчик с задержкой
final Handler handler = new Handler();
final Runnable r = new Runnable()
{
public void run()
{
<some task>
}
};
handler.postDelayed(r, 15000);
Также я был бы признателен, если бы вы могли объяснить, когда использовать какой подход и почему один из них более эффективен, чем другой (если это действительно так).
Ответы:
Handler
лучше чемTimerTask
.И Java,
TimerTask
и AndroidHandler
позволяют планировать отложенные и повторяющиеся задачи в фоновых потоках. Однако в литературе настоятельно рекомендуется использоватьHandler
overTimerTask
в Android (см. Здесь , здесь , здесь , здесь , здесь и здесь ).Некоторые из сообщенных проблем с TimerTask включают:
пример
Лучший источник всех видов Android-примеров, которые я видел, - это Codepath . Вот
Handler
пример повторяющейся задачи.Связанный
источник
mHandler.removeCallbacks(runnableCode)
в подходящее время (например,onStop()
для занятия).Скопировано с:
TimerTask vs Thread.sleep vs Handler postDelayed - наиболее точно вызывать функцию каждые N миллисекунд?
источник
Котлинская версия принятого ответа:
источник