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)