2016-04-12 8 views
1

aus irgendeinem Grund läuft meine Timer nur einmal ausgeführt wird:Meine Timertask nicht

Code:

int i = 0; 
private void startTimer() { 


    final Timer timer = new Timer(); 
    final TimerTask task = new TimerTask() { 
     @Override 
     public void run() { 

      Log.d("DTAG","K1"); 

      if(preferences.getBoolean(IS_RUNNING_KEY, false)) 
      { 
       Log.d("DTAG","K2"); 
       final int k = i++; 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         timeCounter.setText(""+k); 
         Log.d("DTAG","K: "+k); 
        } 
       }); 
      } else { 

       Log.d("DTAG","K3"); 
       timer.cancel(); 
       timer.purge(); 

      } 
     } 
    }; 

    timer.schedule(task, 1000); 

} 

Log:

04-12 16:47:32.333 3079-3684/com.michlind.nanytime D/DTAG: K1 
04-12 16:47:32.334 3079-3684/com.michlind.nanytime D/DTAG: K2 
04-12 16:47:32.338 3079-3079/com.michlind.nanytime D/DTAG: K: 0 
+0

in API in Ihrem Fall also geben wird : 'Planen Sie eine Aufgabe für die Einzelausführung – Opiatefuchs

Antwort

4

, die das erwartete Verhalten von schedule(TimerTask, long) ist. Aus der Dokumentation

Planen Sie eine Aufgabe für die Einzelausführung nach einer bestimmten Verzögerung.

Verwenden Sie stattdessen scheduleAtFixedRate.

timer.scheduleAtFixedRate(task, 0, 1000); 

können Sie mehr here

1

Sie müssen rufen Zeitplan Methode mit zwei params lesen. Erstens ist, wie viel es warten muss, beginnen, die zweite ist das Intervall zwischen Ausführungen:

// schedule the timer, after the first 1000ms the TimerTask will run every 1s 
timer.schedule(timerTask, 1000, 1000); // 
1

versuchen Dokumentation zu lesen sein kann es besser Timer

Die Funktion, die Sie verwenden

Timer.schedule(TimerTask, long) 
zu verstehen

Planen Sie eine Aufgabe für die Einzelausführung nach einer bestimmten Verzögerung.

Verwenden

Timer.scheduleAtFixedRate (TimerTask task, long delay, long period) 

für die Planung eine Aufgabe zur wiederholten Festsatz Ausführung nach einer bestimmten Verzögerung wird die Beschreibung für Schedule (Aufgabe 1000)

timer.schedule(task, 0, 1000);