2012-04-05 9 views

答えて

22

Timerを使用し、scheduleのいずれかの方法を使用してTimerTaskをスケジュールすると、自動的に新しいスレッドが作成されます。

例:

Timer t = new Timer(); 
t.schedule(myTimerTask, 1000L); 

これは、1秒に1回そのタイマーに属するスレッドでmyTimerTaskを実行するタイマーを作成します。

+0

上記のコードは、タスクを1秒後に_only once_だけスレッド内で実行する「Timer」を作成します。毎秒1回タスクを実行するには、 'schedule(TimerTask task、long delay、long period)'というオーバーロードされた 'schedule'メソッドを使います。たとえば、 'timer.schedule(myTimerTask、1000L、2000L)'は、1秒の初期遅延後に2秒ごとに実行されるタイマーを作成します。ここにメソッド[リンク]へのリンクがあります(https://developer.android.com/reference/java/util/Timer.html#schedule(java.util.TimerTask、long、long))[link] –

+0

リンク上記のコメントで間違ってフォーマットされました。ここには[タイマーの方法](https://developer.android.com/reference/java/util/Timer.html)の修正されたリンクがあります –

47

私はこのような何かを実装している、それが正常に動作します:

private Timer mTimer1; 
    private TimerTask mTt1; 
    private Handler mTimerHandler = new Handler(); 

    private void stopTimer(){ 
     if(mTimer1 != null){ 
      mTimer1.cancel(); 
      mTimer1.purge(); 
     } 
    } 

    private void startTimer(){ 
     mTimer1 = new Timer(); 
     mTt1 = new TimerTask() { 
      public void run() { 
       mTimerHandler.post(new Runnable() { 
        public void run(){ 
         //TODO 
        } 
       }); 
      } 
     }; 

     mTimer1.schedule(mTt1, 1, 5000); 
    } 
+1

すばらしい答え...なぜアップフォートはありませんか? .... –

+0

予定は何ですか? – Praneeth

+0

スケジュール内の1は、スケジュールされたTimerTaskを最初に実行するまでの時間(ミリ秒単位)です。 5000は、後続の実行の間の遅延量(ミリ秒単位)です。 – Cogentleman

7

これは、タイマータスクのための完璧な例です。

Timer timerObj = new Timer(); 
    TimerTask timerTaskObj = new TimerTask() { 
     public void run() { 
      //perform your action here 
     } 
    }; 
    timerObj.schedule(timerTaskObj, 0, 15000); 
関連する問題