タイマーは別スレッドなので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."); } }