TimerTasks nicht ideal ist in einer Android-Umgebung zu verwenden, weil sie nicht kontext bewusst sind. Wenn Ihr Kontext sich verflüchtigt, wartet die TimerTask immer noch geduldig im Hintergrund und feuert möglicherweise Ihre App ab, weil ihre Aktivität zuvor beendet wurde. Es kann auch Referenzen zu Ihrer Aktivität enthalten, nachdem diese geschlossen wurde. Dadurch wird verhindert, dass sie als Garbage Collected erfasst werden und Ihre App möglicherweise nicht mehr genügend Arbeitsspeicher zur Verfügung hat.
Verwenden Sie stattdessen postDelayed(), wodurch die Aufgabe automatisch beendet wird, wenn die Aktivität heruntergefahren wird.
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);
By the way, wenn Sie jemals Ihre Aufgabe manuell stornieren müssen, können Sie removeCallbacks(r)
verwenden, wo r die runnable zuvor geschrieben ist.
Für diejenigen, die Service/Aktivität starten oder Broadcast planen möchten, werfen Sie einen Blick auf [AlarmManager] (http://developer.android.com/reference/android/app/AlarmManager.html) –