Androidのドキュメント SystemClock.elapsedRealtime()
によると、汎用のインターバルタイミングの推奨基準です。これは、ドキュメントによると、elapsedRealtime()が原因です。is guaranteed to be monotonic, [...], so is the recommend basis for general purpose interval timing.
SystemClockのドキュメントには、さまざまな時間メソッドとそれらに適用可能なユースケースの概要が記載されています。
SystemClock.elapsedRealtime()
とSystemClock.elapsedRealtimeNanos()
は、汎用の経過時間を計算するための最善の策です。
SystemClock.uptimeMillis()
別の可能性もありSystem.nanoTime()
ますが、推奨される方法とは異なり、深い睡眠の時間は含まれていません。これが目的の動作である場合は、使用しても問題ありません。それ以外の場合は。に固執しelapsedRealtime()
ます。
System.currentTimeMillis()
これは「壁時計時刻」を返すので、近づかないでください。実時間は前後にジャンプする可能性があるため、経過時間の計算には適していません。NTPクライアントのような多くのものは、実時間のジャンプとスキューを引き起こす可能性があります。これにより、に基づく経過時間の計算currentTimeMillis()
が常に正確であるとは限りません。
ゲーム開始時:
long startTime = SystemClock.elapsedRealtime();
ゲームが終了したとき:
long endTime = SystemClock.elapsedRealtime();
long elapsedMilliSeconds = endTime - startTime;
double elapsedSeconds = elapsedMilliSeconds / 1000.0;
また、Timer()はベストエフォートタイマーであり、常に正確であるとは限りません。そのため、ゲームの期間中にタイミングエラーが蓄積されます。中間時間をより正確に表示するにSystem.currentTimeMillis()
は、に送信される時間の基準として定期的なチェックを使用しsetText(...)
ます。
また、を使用する代わりに、を使用Timer
することを検討するTimerTask
こともできます。このクラスは、実行したいことのために設計されています。唯一の問題は、カウントアップではなくカウントダウンすることですが、それは単純な減算で解決できます。