[Android] カウントアップするタイマー、ストップウォッチをTimerTaskで作る

Android7

タイマーやストップウォッチはchronometerを使えば簡単にできますが、自由度があまりありません。カウントアップ専用のTimerTaskを使えば100msec刻みのタイマーが作れます。
 

Android Studio 2.2.2
Android 7.1.1

 


TimerTask

 
TimerTimerTaskを使います。
 
タイマーのインスタンスを生成してスケジュールを設定

periodが時間間隔でこれを100にすると100msec間隔を意味します。
 
TimerTaskを継承したクラスを作り、メソッドのrun()を使って走らせます。(後半に簡略化した例もあります)

ここで、TimerTaskの別スレッドができますが、描画処理はmainスレッドでしかできませんのでHandlerのpostで処理待ちにします。
 
MainActivity.java

 

レイアウトです
activity_main.xml

 
注意点:

  • countで100msec刻みとなるためlongを越えるとエラーになりますので注意
  • 時間表示にString.formatを使っていますがString.format(“%1$02d:%2$02d.%3$01d”, mm, ss, ms)
    23:9.9->23:10.0 のように桁があっていないと気持ちが悪いので$02dとして2桁限定にしています。レイアウトで対処することも可能でしょう。
  • タイマーを停止するために使うcancel()でTimerやTimerTaskは破棄されてしまいます。再開するときには再度インスタンスを生成する必要があります。

 
もっと簡略化して、使いやすくするとこうなります

 

タイマー関連:

Chronometer
TimerTask
currentTimeMillis
CountDownTimer

References:
Timer
TimerTask