2016-05-27 13 views
1

ich ein TimerTask in meinem Android-Code hinzugefügt haben:Timertask ist repeatetly nach der Zeit-Sprung genannt vorwärts

private class MyTimerTask extends TimerTask { 

    @Override 
    public void run() { 
     //do some task... 
    } 
} 

und nannte es wie folgt:

myTimer = new Timer(); 
//set the rate as 1 min 
myTimer.scheduleAtFixedRate(new MyTimerTask(), 0, 
        60*1000); 

Nun, wenn ich die automatische Zeit ausschalten aktualisieren (aus dem Netzwerk) und das Datum als das Datum von morgen festlegen, dann wird die Zeitgeberaufgabe alle 5 Millisekunden gestartet.

Dafür habe ich keine Ahnung, warum es passiert und ich muss das beheben. Ich habe bereits Handler verwendet, aber ich möchte, dass TimerTask sich korrekt verhält.

Bitte helfen Sie mir in dieser Hinsicht ...

+0

warum bist du mit 'TimerTask' gegangen, wenn du' Handler' basierte Sachen schon benutzt hast? – pskink

Antwort

2

Da Sie scheduleAtFixedRate verwenden und nicht schedule es versucht, mit „verpassten“ Hinrichtungen für den letzten Tag, um aufzuholen.

Vom API documentation:

mit fester Rate Ausführung, die Startzeit von jedem aufeinanderfolgenden Durchlauf einer Aufgabe ohne Rücksicht geplant für, wenn der vorherigen Lauf stattfindet. Dies kann zu einer Reihe von gebündelten Läufen führen (eine wird unmittelbar nacheinander gestartet), wenn Verzögerungen verhindern, dass der Zeitgeber Aufgaben rechtzeitig startet.

+0

Also, wenn ich schedule() anstelle von scheduleAtFixedRate() verwenden, würde es das Problem richtig lösen? – Dharsam1990

+0

Ich vermute, ja. Schauen Sie sich JavaDoc an, wenn dies Ihren Anforderungen entspricht. –