こんにちは。
そろそろ梅雨に突入ですね。
今回は、前回のタイマーズレの続きです。
javaのロジックで作ったタイマーの値とChronometerを使用した
値が違った話です。
念のため、ストップボタンを押すと同時にスマホのストップウォッチ
を起動してみました。
比較してみたところ、javaロジックのタイマーが合っていました😀
Chronometerの方がなんか速いんですよね。
スタートダッシュがすごいというか・・・。
前回は、2秒速いと言いましたが、別のケースでは4秒早かったりします。
そして、何回か動かしてやっと一つ理解できました✌
Chronometerの方は・・・・、
アプリが起動してから経過した時間が表示されるみたいのなのです💦
↓ 試しにアプリ起動から7秒ほどたってからスタートボタンを
押したケースです。
左上のChronometerの方が7秒早くなってますね。
つまり、アプリ起動時に、Chronometerは裏でタイマーを起動していて
スタートボタンを押した時にそのタイマーの値を表示する
ってことでしょうか🙂
うーん、どうしましょうか。
こういう仕様なんでしょうね。
調べてみて、試行錯誤して結果こういうロジックを書きました。
↓ 1行目と10行目を追加しました。
import android.os.SystemClock;
・・・・・(処理略)・・・・・
@Override
public void onClick (View view) {
・・・・・(処理略)・・・・・
// システムクロックをセット
timer.setBase(SystemClock.elapsedRealtime());
// タイマー2を起動
timer.start();
}
setBaseは、Chronometerの起点・スタートをセットできる関数です。
通常のstartでアプリ起動後の時間経過を表示するため、start起動前に
起点を定める必要があります。
次に、setBaseの引数のSystemClock.elapsedRealtimeですが、
システムが起動してからの時間を表すようで、ここだとボタンが
押されてからの時間を表示してくれます。
ちなみにここの引数に0をセットしたら失敗でした。
(setBaseを指定しない状態と同じで、アプリ起動時間を表示しました。)
上記の処理で、エミュレータを起動します。
↓ はい。時間ぴったりになりました。
無事にできて良かったです。
停止の際は、そのままstopで停止しました。
てっきり、javaロジックをミスしたかと思いました💦
新しいロジックも便利ですが、使い方の前提をきっちり
理解していないと使いこなすのはちょっと苦戦しますね😅
それが面白いんですけどね😄
ストップウォッチ編はこのくらいで完了とします。
そろそろkotlinを使ってみたいなと考えています。
今回はここまで🤚
では、また次回。