2012-12-02 3 views
1
나는 스톱워치를 필요로하고 내가 모든 1000MS 값을 쓰기 시도 있도록 잘 작동하지 않았다 http://www.goldb.org/stopwatchjava.html

에 System.currentTimeMillis()이 작동 잘못

을 사용

:

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));    
    } 
}; 

나는 시간마다의 값을 볼 수 있습니다

enter image description here

실제 시간은 5ms의 + 최대하지만 열에서 적어도 삼초는 다음과 같습니다 초 CatLog에서 이것은 결과입니다! 그게 어떻게 가능해? 그것은

new Date().getTime(). 

예상대로 전달합니다 일부 스톱워치 클래스는이 테스트 있는가와 동일?

감사합니다.

답변

3

경과 시간을 측정하고 정확한 시간을 측정하려면 System.nanoTime()을 사용해야합니다. 결과가 잘못되지 않는 한 System.currentTimeMillis()을 사용할 수 없습니다.

나노 시간의 목적은 경과 시간을 측정하는 것이며, currentTimeMillis의 목적은 벽시계 시간을 측정하는 것입니다. 다른 용도로는 사용할 수 없습니다. 그 이유는 컴퓨터의 시계가 완벽하지 않기 때문입니다. 그것은 항상 표류하고 때로는 시정 될 필요가 있습니다.

nanoTime의 목적은 경과 된 시간을 측정하기위한 것이기 때문에 이러한 작은 보정에 영향을받지 않습니다. 나노 계산 (microcalculation)에서 정확도가 더 좋기 때문에 nanoTime()을 선택하는 것이 좋습니다.

매우 정확한 경과 시간 측정에 사용됩니다. 자바 독에서 :

long startTime = System.nanoTime(); 

//은 ... 코드가

long estimatedTime = System.nanoTime() - startTime; 
+0

내 누적 오류가 발생했습니다. System.nanoTime()을 사용하면 올바르게 작동합니다. – vlkpo

0

불가능 같은데 ... 측정된다. 나는 그런 식으로 행동하지 않았다. System.currentTimeMillis(). 또한 Log.d()으로 로그 아웃했지만 표시되는 logcat은 Log.e()입니다. 그게 바로 logcat이야?