[Android] ターマーやストップウォッチをSystem.currentTimeMillis() で作成するには

System.currentTimeMillis()を使って、現在の時刻をミリ秒でカウントするストップウォッチ・タイマーを作ってみます。TimerTaskを使ったカウントアップタイマーと同じようにrun()やHandlerのpostを使います。

timer2_1

Android Studio 2.1.1
Android 6.0

 

sponsored link

System.currentTimeMillis()

 
java.lang.System.currentTimeMillis() は
ミリ秒で表される現在の時間を返します
Ref: java.lang.System クラス

これを使って

カウント時間 = 経過時間 – 開始時間

という形でタイマーを作ります

計測間隔は
public static void sleep(long millis) throws InterruptedException
を使って
Thread.sleep(10);
のようにミリ秒のウェイトをかけて表示させるようにします

 

ミリsecから 分:秒.ミリ秒 へ変換

 
時間の表示を [分:秒.ミリ秒] で表現したいときには
SimpleDateFormatを使うと簡単です
ミリ秒で表されるmillisecがあるとすると、

あるいは、個別の時間が欲しいときなどは計算でも出せます。

今回は簡単にSimpleDateFormatを使います。

MainActivity.java

レイアウトはTimerTaskによるカウントアップタイマーと同じです
activity_main.xml

 

ミリsecの表示について考察

 
ミリ秒の1の位まで表示させたいのですが、エミュレータでは10の位で切られています

System.currentTimeMillis()の精度はPCに依存して10msec以下は測定できない場合もあるようです
java.lang.System クラス

検証のためsleepを7msecでLogを取ってみると

private int period = 7;
Log.d(“time”, String.valueOf(endTime));

Emyulator:

10msecで切られていて、かつ間隔は20msecとなっています

Nexus7:

ミリsecのオーダーで数値が出ていますが
間隔は10msec以上もありバラバラです

この場合は見た目はmsecまで出ているのでいいのですが
負荷が大きいと思われます

System.currentTimeMillis()の他に
System.nanoTime()があります

使い方が良ければより精度が高くできるかもしれません

タイマー関連: