2016-01-07 14 views
5

Es folgt der Code-Schnipsel, die ich in meinem Projekt verwende eine Aufgabe,Android Timer Schedule

mTimer = new Timer(); 
mTimer.schedule(new TimerTask() { 

@Override 
public void run() { 
    //Do Something 
} 

}, interval, interval); 

Dies funktioniert gut zu planen. Ich bekomme das Ereignis nach dem erwähnten Intervall. Dies kann jedoch kein Ereignis senden, wenn das Datum kleiner als der aktuelle Wert aus den Einstellungen festgelegt ist.

Weiß jemand, warum dieses Verhalten passiert?

+0

Erarbeiten Sie Ihre Frage –

+0

Wenn Timer eingestellt ist und Datum von Einstellungen auf niedriger als das aktuelle Datum geändert wird, gibt es keinen Rückruf – Neji

+0

, aber warum sollte ein Timer für weniger als das aktuelle Datum laufen ?? Warum nicht einfach die Auswahl des Datums weniger als das aktuelle Datum deaktivieren? –

Antwort

4

Timer schlägt fehl, wenn Sie die Systemuhr weil it's based on System.currentTimeMillis() ändern, die nicht monoton ist.

Timer ist keine Android-Klasse. Es ist eine Java-Klasse, die in der Android-API vorhanden ist, um vorhandene Nicht-Android-Bibliotheken zu unterstützen. Es ist fast immer eine schlechte Idee, einen Timer in Ihrem neuen Android-Code zu verwenden. Verwenden Sie eine Handler für zeitgesteuerte Ereignisse, die innerhalb der Lebensdauer der Aktivitäten oder Dienste Ihrer App auftreten. Handler is based on SystemClock.uptimeMillis(), die ist monoton. Verwenden Sie eine Alarm für zeitgesteuerte Ereignisse, die auch dann auftreten sollten, wenn Ihre App nicht ausgeführt wird.

+0

Perfekt !!, genau das, was ich brauchte. Ich habe mein Problem bereits mit dem Handler gelöst, war aber gespannt, was bei einem gebrauchten Timer an erster Stelle schief gelaufen ist! :) – Neji

0

Mit diesem Code .. Dies wird Ihnen helfen ..

Timer t; 
seconds = 10; 

public void startTimer() { 
     t = new Timer(); 
     //Set the schedule function and rate 
     t.scheduleAtFixedRate(new TimerTask() { 

      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         if (seconds == 0) { 
          t.cancel(); 
          seconds = 10; 
         // DO SOMETHING HERE AFTER 10 SECONDS 
         Toast.makeText(this,"Time up",Toast.LENGTH_SHORT).show(); 
         } 
         seconds -= 1; 
        } 
       }); 
      } 
     }, 0, 1000); 
    } 
+0

Ich brauche Grund, warum es nicht funktioniert, wenn ich Datum zu niedriger als aktuelle ändern werde – Neji