AndroidでタイマーからUIを操作する

タイマーは別スレッドなのでUIスレッドを操作するにはHandlerを
使わないといけないのかな、と思っていたら
HandlerクラスにpostDelayedというメソッドが用意されていた。
http://stackoverflow.com/questions/8678658/handler-or-timer-android

これをRunnableインターフェースの中に書いておいて、インスタンスを作ってrun()すると
TimerとTimerTaskを使わなくても良い。

ただこれだと例によってON/OFFができないので
別途フラグを用意してやる。
http://stackoverflow.com/questions/13723874/how-to-stop-runnning-runnable-in-android

package com.example.multithreaduitest;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	SimpleDateFormat sdf = new SimpleDateFormat("k:m:s:S");
	TextView tv;
	Button btnSt;
	Timer timer;
	Handler handler = new Handler();
	boolean running = true;
	Runnable runnable = new Runnable() {
		public void run() {
			if (running) {
				Date date = new Date();
				tv.setText(sdf.format(date));
				handler.postDelayed(runnable, 1000);
				Log.e("timer", "timer is running");
			}
		}
	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv = (TextView) findViewById(R.id.tv1);
		btnSt = (Button) findViewById(R.id.btnSt);
		btnSt.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				runnable.run();
			}
		});
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		running = false;
		Log.e("timer", "timer is disabled...??");
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		running = true;
		Log.e("timer", "timer is Re:activated.");
	}
}