1

stopWatch が必要で、http://www.goldb.org/stopwatchjava.htmlを使用しました

うまくいかなかったので、1000msごとに値を書き出そうとしました:

stopWatch.start();
HandlerScrollBar.postDelayed(TtScroll,  1000);

private Runnable TtScroll = new Runnable() {
    public void run() {
        long time = stopWatch.getElapsedTime();
        HandlerScrollBar.postDelayed(TtScroll,(long) 1000);
        Log.d(TAG, Long.toString(time));            
    }
};

CatLog で毎秒時間の値を確認できます。これが結果です。

ここに画像の説明を入力

リアルタイムは最大+5msですが、コラムは最低でも+3秒!それはどのように可能ですか?と同じです

new Date().getTime().

期待どおりにこのテストに合格する StopWatch クラスはありますか?

ありがとうございました。

4

2 に答える 2

5

経過時間を測定していて、それを正しくしたい場合は、を使用する必要がありますSystem.nanoTime()System.currentTimeMillis()結果が間違っていることを気にしない限り、を使用することはできません。

nanoTimeの目的は経過時間を測定することであり、currentTimeMillisの目的は実時間を測定することです。他の目的に使用することはできません。その理由は、完璧なコンピューターの時計はないからです。それは常にドリフトし、時々修正する必要があります。

nanoTimeの目的は経過時間を測定することであるため、これらの小さな修正の影響を受けません。これらのマイクロ計算の精度が高いため、nanoTime()を選択することをお勧めします。

経過時間の非常に正確な測定用。そのjavadocから:

long startTime = System.nanoTime(); 

//...測定されるコード..。

long estimatedTime = System.nanoTime() - startTime;
于 2012-12-02T22:48:27.470 に答える
0

不可能のようです。私はSystem.currentTimeMillis()そのように行動したことがありません。また、としてログアウトしてLog.d()いますが、表示されているlogcatはを示していLog.e()ます。あなたはそれが正しいlogcatだと確信していますか?

于 2012-12-02T22:50:19.893 に答える