Timer(TimerTask)自体はJavaのAPIにあるものらしい
Androidアプリでコードを書いてみた
package jp.co.timeractivity; import android.app.Activity; import android.os.Bundle; import android.util.Log; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends Activity { Timer timer; long delay; long period; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onPause() { timer.cancel();//タイマーを止める super.onPause(); } @Override protected void onResume() { super.onResume(); timer = new Timer();//タイマー作る delay=1000;//1秒 period=5*1000;//5秒 TimerTask timerTask = new TimerTask() {//TimerTask作成 @Override public void run() { Log.d("TimerTask", "TimerTask is running"); } }; timer.scheduleAtFixedRate(timerTask, delay, period);//タイマーdelay(ms)後にperiod(ms)毎にtimerTaskを実行 } }
ちなみに
timer.scheduleAtFixedRate(timerTask, delay, period);
と書いたのは
timer.schedule(timerTask, delay, period);
と書くとLogが
03-21 17:02:10.491 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:02:15.491 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:02:20.492 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:02:25.493 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:02:30.493 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:02:35.493 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:02:40.493 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:02:45.494 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:02:50.494 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:02:55.494 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:03:00.494 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:03:05.494 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:03:10.495 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:03:15.495 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:03:20.495 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:03:25.496 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:03:30.497 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:03:35.498 25777-25908/jp.co.timeractivity D/TimerTask: TimerTask is running
となって最初と最後では0.007秒の差ができてしまう(実機Nexus6)
ちなみにAtFixedRateの方は
03-21 17:04:35.612 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:04:40.612 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:04:45.612 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:04:50.611 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:04:55.611 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:00.612 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:05.612 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:10.612 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:15.611 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:20.612 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:25.611 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:30.611 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:35.611 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:40.611 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:45.612 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:50.611 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running 03-21 17:05:55.611 28068-28247/jp.co.timeractivity D/TimerTask: TimerTask is running
となりちゃんと時間通り誤差は0.001秒で.611と.612を行ったり来たりしている(同じく実機Nexus6)