素人プログラマ奮闘記

javaの初心者がAndroidのことを独学で勉強しつつ、メモを残していきます。

Timerを使ってみる(1)

時間経過や一定間隔での処理を行う場合にはタイマーがよく使われます。
今回 はタイマーの基本的な使い方をまとめてみました。

Javaのタイマーにはいくつか種類がありますが、今回はjava.util.Timerクラスを使ってみます。
このクラスのインスタンスを作成し、スケジュールを指定すると任意の処理を定期的に実行できるようになります。

まずはインスタンスを生成方法を見てみましょう。


Timer mainTimer = new Timer();
次に周期的に実行する処理の設定方法ですがTimerTaskクラスを使用します。
TimerTaskはabstractクラスなので必ず継承したクラスを用意することになります。


public class MainTimerTask extends TimerTask {
	@Override
	public void run() {
		//ここに定周期で実行したい処理を記述します			
	}		
}
タイマーを終了するときは

mainTimer.Cancel();
次にTimerクラスにスケジュールを設定します。

//mainTimer.schedule(TimerTask task, long delay, long period)
 mainTimer.schedule(new MainTimerTask(), Date time)
TimerTask=スケジュールされるタスク
delay=初めのタスクが実行されるまでの時間 です。(単位ミリ秒)
period=タスクが実行される周期です。(単位ミリ秒)

定周期に数字をカウントして、そのカウント数を画面上に表示するサンプルを下記に記述します


package com.example.timertest;

import java.util.Timer;
import java.util.TimerTask;

import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

	
	private Timer mainTimer;					//タイマー用
	private MainTimerTask mainTimerTask;		//タイマタスククラス
	private TextView countText;					//テキストビュー
	private int count = 0;						//カウント
	private Handler mHandler = new Handler();   //UI Threadへのpost用ハンドラ

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		//タイマーインスタンス生成
		this.mainTimer = new Timer();
		//タスククラスインスタンス生成
		this.mainTimerTask = new MainTimerTask();				
		//タイマースケジュール設定&開始
		this.mainTimer.schedule(mainTimerTask, 1000,500);
		//テキストビュー
		this.countText = (TextView)findViewById(R.id.count_text);
			 
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
	

	/**
	 * タイマータスク派生クラス
	 * run()に定周期で処理したい内容を記述
	 * 
	 */
	public class MainTimerTask extends TimerTask {
		@Override
		public void run() {
			//ここに定周期で実行したい処理を記述します			
	         mHandler.post( new Runnable() {
	             public void run() {
	 
	                 //実行間隔分を加算処理
	            	 count += 1;
	            	 //画面にカウントを表示
	            	 countText.setText(String.valueOf(count));
	             }
	         });
		}
	}
}

カテゴリーへ

inserted by FC2 system