2016-04-12 8 views
1

を実行していない:私TimerTaskを私のタイマーが一度だけ実行されているいくつかの理由で

コード:

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); 

} 

ログイン:

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

、すなわち経過した後に繰り返さ固定金利の実行のためのタスクをスケジュールするための: '単一実行のためのタスクのスケジュール設定' – Opiatefuchs

答えて

4

schedule(TimerTask, long)の予想される動作です。ドキュメントから

指定された遅延の後にタスクを1回実行するようにスケジュールします。

代わりにscheduleAtFixedRateをお試しください。

timer.scheduleAtFixedRate(task, 0, 1000); 

あなたは2つのparamsでスケジュールメソッドを呼び出す必要がhere

1

続きを読むことができます。第一、第二の実行間隔で、それが起動するのを待つ必要がありますどのくらいのためにある:

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

良くTimer

あなたは

Timer.schedule(TimerTask, long) 
を使用している機能を、それを理解するためにドキュメントを読んでみてくださいする可能性があり

指定された遅延後に単一実行のタスクをスケジュールします。

使用

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

特定の遅延は、スケジュールの説明(タスク1000)があるAPIにあなたのケース

timer.schedule(task, 0, 1000); 
関連する問題