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(); } }