Timer(TimerTask)のコードを書いてみた

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)

スポンサーリンク

シェアする

フォローする

スポンサーリンク