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

current time millis 01 - [Android] ターマーやストップウォッチをSystem.currentTimeMillis() で作成するには
System.currentTimeMillis()を使って、ミリ秒でカウントするストップウォッチ・タイマーを作ってみます。TimerTaskを使ったカウントアップタイマーと同じようにrun()やHandlerのpostを使います。

Android Studio 3.4.2
API 29
AndroidX



System.currentTimeMillis()

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

これを使って

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

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

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

 

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

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

但し、これは時刻を表示するものを便宜的に使ったのでLocaleの設定をしないとWarningが出ます。
年月日も追加してみるとわかりますが、startしてからの時間計測はこの例では、起点である1970/1/1からの時間ということになってしまいます。
あるいは、以下のように計算でも出せます。

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

 

サンプルコード

 
以上の事を踏まえて簡単なサンプルを作ってみましょう。
MainActivity.java

 
レイアウトは
activity_main.xml

 
リソースです
strings.xml

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

 

ミリ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()があります

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

タイマー関連:

References:
currentTimeMillis() System | Android Developers
SimpleDateFormat | Android Developers
currentTimeMillis() – java.lang.System クラス

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加

 

アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう。

オンラインスクールは色々ありますが、以下の3つはAndroidが学習できる老舗スクールです。


TECH ACADEMY
Androidアプリコース


こういうものではアプリ作れないと言う意見もありますが、それは結局本人のやる気があるかないかです。やる気があっても独学では突破しにくいところは教えてもらうのが一番早い。


侍エンジニア塾
侍エンジニア塾 無料体験レッスン


とても簡単なことなのに本やネットの画像だけでは分かりにくいことはあります。実際に質問してピンポイントで教えてもらうと、なんだそんなこと、と言うのがけっこうあります。


CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp




直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。


無料で転職まで
これはアプリ限定ではありませんが無料です
その代わり就職することを前提にしたスクールでエンジニアになって職を得たいのであれば手っ取り早いかもしれません

受講料無料:社会人転職コース




シェアする

  • このエントリーをはてなブックマークに追加

フォローする