Google Androidで定期処理

タイマーを張って定期処理をするコードを以前書いた。Java言語とかハンドラとかタイマーとか色々わかってないので自分でもよくわからないコードになっている。Java言語のイベント処理や内部クラス、無名クラスの理解が乏しいから勉強しよ。

package com.android.example.clockv0;

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

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;

public class Clock extends Activity {
	ClockView view;
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        view = new ClockView(getApplication());
        setContentView(view);

        Timer timer = new Timer();
        // カウントアップの設定(1000ms間隔)
        timer.schedule(new Count(), 0, 1000);
        // 描画更新の設定(500ms間隔)
        timer.schedule(new DrawNotifier(), 0, 500);
    }

    class ClockView extends View {
    	public ClockView(Context context) {
    		super(context);
    	}
    	
    	@Override
    	protected void onDraw(Canvas canvas) {
        	String strTime;
    		Paint paint = new Paint();
    		paint.setColor(Color.LTGRAY);
    		strTime = "passed "+Count.getCounter()+"sec";
    		canvas.drawText(strTime, 10, 10, paint);
    	}
    }
    
    class DrawNotifier extends TimerTask {
    	Handler handler = new Handler();
    	
    	public void run() {
    		handler.post(
    			new Runnable() {
					public void run() {
						view.invalidate();
					}
				}
			);
    	}
    }
}
package com.android.example.clockv0;

import java.util.TimerTask;

public class Count extends TimerTask {
	private static int counter = 0;
	
	public void run() {
		counter++;
	}
	
	public static int getCounter() {
		return counter;
	}
}

Chronometerというのもあるみたい。昨日買った本で知った。

package com.example.android.chronometer;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Chronometer;
import android.widget.Chronometer.OnChronometerTickListener;

public class MyChronometer extends Activity implements OnChronometerTickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Chronometer cm = (Chronometer)findViewById(R.id.chronometer_id);
        cm.setOnChronometerTickListener(this);
        cm.start();
    }
    
    public void onChronometerTick(Chronometer chronometer) {
    	chronometer.invalidate();
    }
}