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こともできます。このクラスは、実行したいことのために設計されています。唯一の問題は、カウントアップではなくカウントダウンすることですが、それは単純な減算で解決できます。