TimerTasks nie są idealne do wykorzystania w android środowiska, ponieważ nie jesteśmy świadomi kontekstu. Jeśli twój kontekst zniknie, TimerTask będzie nadal cierpliwie czekał w tle, w ostateczności strzelając i potencjalnie powodując awarię aplikacji, ponieważ jej działanie zostało wcześniej zakończone. Może też zawierać odniesienia do Twojej aktywności po jej zamknięciu, co zapobiega gromadzeniu śmieci i potencjalnemu wyczerpaniu pamięci.
Zamiast tego należy użyć funkcji postDelayed(), która automatycznie anuluje zadanie po zamknięciu działania.
final int delay = 5000;
final int period = 1000;
final Runnable r = new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),"RUN!",Toast.LENGTH_SHORT).show();
postDelayed(this, period);
}
};
postDelayed(r, delay);
Nawiasem mówiąc, jeśli kiedykolwiek potrzeba, aby anulować zadanie ręcznie, można użyć removeCallbacks(r)
gdzie r jest runnable ty pisał wcześniej.
Dla tych, którzy chcą zaplanować rozpoczęcie/rozpoczęcie usługi/aktywności, zajrzyj do [AlarmManager] (http://developer.android.com/reference/android/app/AlarmManager.html) –