Powiedzmy, że chcę wykonywać jakąś czynność co 10 sekund i niekoniecznie muszę aktualizować widok.
Pytanie brzmi: czy lepiej (mam na myśli bardziej wydajne i efektywne) używać timera z timertask, jak tutaj:
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);
}
lub po prostu handler z opóźnieniem
final Handler handler = new Handler();
final Runnable r = new Runnable()
{
public void run()
{
<some task>
}
};
handler.postDelayed(r, 15000);
Byłbym również wdzięczny, gdybyś mógł wyjaśnić, kiedy zastosować które podejście i dlaczego jedno z nich jest bardziej wydajne niż inne (jeśli rzeczywiście jest).
Odpowiedzi:
Handler
jest lepszy niżTimerTask
.Java
TimerTask
i AndroidHandler
umożliwiają planowanie opóźnionych i powtarzających się zadań w wątkach w tle. Jednakże, w literaturze zdecydowanie zaleca stosowanieHandler
naTimerTask
Android (patrz o , o , o , o , o , a tutaj ).Niektóre z zgłoszonych problemów z TimerTask obejmują:
Przykład
Najlepszym źródłem wszelkiego rodzaju przykładów Androida, które widziałem, jest Codepath . Oto
Handler
przykład powtarzającego się zadania.Związane z
źródło
mHandler.removeCallbacks(runnableCode)
w odpowiednim czasie (np. WonStop()
przypadku działania).Skopiowano z:
TimerTask vs Thread.sleep vs Handler postDelayed - najdokładniejsze wywołanie funkcji co N milisekund?
źródło
Wersja zaakceptowanej odpowiedzi Kotlin:
źródło