2016-04-23 5 views
-1

Ich habe einen Timer, der mit der OnCreate-Methode der Aktivität läuft, wie unten gezeigt. Wenn er ausgeführt wird, wird der Timer wie gewünscht erhöht. Angezeigt:"runOnUIThread" wird jedes Mal schrittweise ausgeführt, wenn ich zur Aktivität zurückkehre.

00:00, 00.01, 00.02 , usw.

final Timer timer = new Timer(); 
     final TimerTask timerTask = new TimerTask(){ 
      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
         String timer = sdf.format(new Date(counter * 1000L)); 
         timerText.setText(timer); 
         counter++; 

        } 
       }); 
      }}; 
timer.schedule(timerTask, 0, 1000); 

Allerdings, wenn ich die Aktivität erneut, das Intervall erhöht den Timer. Wenn ich es das erste Mal erneut, wird das Intervall 2 dh

00:00, 00.02, 00.04 , usw.

Revisiting es wieder das Intervall 3 dh macht

00:00, 00.03, 00.06 , usw.

Und die Intervalle nehmen weiter zu. Ich deduzierte die runOnUIThread-Methode ausgeführt wird n mal, wo n ist die Anzahl der onCreate zugegriffen wurde, aber ich weiß nicht wirklich, was ich dagegen tun soll.

+1

Entsorgen Sie den Timer in der OnDestroy-Methode. – Arijoon

Antwort

0

Verwenden Sie den Timer-Konstruktor, der angibt, dass es ein Daemon new Timer(true) ist, so dass beim Beenden des Timers auch der Thread beendet wird. Beachten Sie auch cancelling den Timer vor dem Beenden auf onDestroy oder onPause zum Beispiel.

Verwandte Themen