Digamos que eu queira realizar alguma ação a cada 10 segundos e não necessariamente precise atualizar a visualização.
A questão é: é melhor (quero dizer mais eficiente e eficaz) usar o temporizador com o timertask como aqui:
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);
}
ou apenas um manipulador com pós-atraso
final Handler handler = new Handler();
final Runnable r = new Runnable()
{
public void run()
{
<some task>
}
};
handler.postDelayed(r, 15000);
Eu também ficaria muito grato se você pudesse explicar quando usar qual abordagem e por que um deles é mais eficiente do que outro (se realmente for).
Respostas:
Handler
é melhor do queTimerTask
.O Java
TimerTask
e o AndroidHandler
permitem que você agende tarefas atrasadas e repetidas em threads de fundo. No entanto, a literatura recomenda esmagadoramente o uso deHandler
overTimerTask
no Android (veja aqui , aqui , aqui , aqui , aqui e aqui ).Alguns dos problemas relatados com TimerTask incluem:
Exemplo
A melhor fonte para todos os tipos de exemplos Android que vi está no Codepath . Aqui está um
Handler
exemplo de uma tarefa repetitiva.Relacionados
fonte
mHandler.removeCallbacks(runnableCode)
no momento apropriado (por exemplo,onStop()
para uma atividade).Copiado de:
TimerTask vs Thread.sleep vs Handler postDelayed - mais preciso para chamar a função a cada N milissegundos?
fonte
Versão Kotlin da resposta aceita:
fonte