2013-04-12 3 views
0
public static final long TIMEOUT = 60000; 
public static final long SYSTEM_TIME = System.currentTimeMillis(); 

내 응용 프로그램의 TIMEOUT 값을 60000으로 설정하고 시스템 시간을 갖고 있습니다. 이제 50 seconds이 경과되었고 최종 사용자에게 메시지를 표시해야하는 것을 어떻게 알 수 있습니까?시작 시간 및 경과 시간과의 시차 계산

if (TIMEOUT - SYSTEM_TIME <= 10000) { 
    Toast.makeText(getApplicationContext(), "10 Seconds Left", Toast.LENGTH_LONG).show(); 
    disconnectHandler.postDelayed(disconnectCallback, DISCONNECT_TIMEOUT); 
} 
+1

[타이머] (http://developer.android.com/intl/ru/reference/java/util/Timer.html) – jimpanzer

+0

캘린더도 사용할 수 있습니다. –

+0

기간 측정에 nanoTime()을 사용하지 않는 이유는 무엇입니까? http://stackoverflow.com/questions/510462/is-system-nanotime-completely-useless – Hector

답변

1

해당 스레드에서 다른 작업을 수행 할 필요가없는 경우 sleep(50000)을 사용할 수 있습니다.

1

이것은 특정 작업 원샷을 실행하는 방법입니다 :

new Timer().schedule(new TimerTask() {    
      @Override 
      public void run() { 
       // TODO 
       ... 
      } 
     }, TIMEOUT); 

기타 문서입니다 here이 같은 것을 사용할 수

1

아마 (jimpanzer에 의해보고) :

long startTime = SystemClock.elapsedRealtime(); 
// do what you want 
long endTime = SystemClock.elapsedRealtime(); 
long ellapsedTime = endTime - startTime; 
if (ellapsedTime>TIME_OUT) { 
    // do stuff 
} 
1

아마도 내가 잘못되었거나 아직 충분한 커피가 없지만 Timeout이 60000 인 경우 시스템 값이 훨씬 더 높습니다. - 모든 밀스는 1970 년부터 시작합니다 (실수하지 않으면 여기뿐만 아니라). 이것은 TIMEOUT - SYSTEM_TIME의 결과가 음수이고 음수가 10000보다 작다는 것을 의미합니다. 따라서 if 문은 항상 실행됩니다.