2010-12-01 4 views
0

어떻게 안드로이드의 CountDownTimer를 사용합니까?어떻게 안드로이드의 CountDownTimer를 사용합니까?

나는 기본적으로 다음과 같은 시나리오를 갖고 싶어 : 그래서 하나를 3 초 통과

boolean 3_s_passed = false; 
// setup counter to change 3_s_passed=true when it finishes 
counter.start(); 
while(true){ 

if(3_s_passed || user_is_Done) break; 
// do some stuff which may set user_is_Done to true 

} 

또는 사용자 마감을 나는 루프에서입니다. 카운터가 완료되기 전에 while 루프 코드가 실행됩니까? CountDownTimer에 대한 제 이해가 맞습니까? 당신의 도움이

답변

0

당신은이에 대한 처리기를 사용할 수에 대한

감사합니다. 3 초 후 또는 사용자가 작업을 수행 할 때 완료 할 작업이있는 Runnable을 만듭니다. 3 초 동안 게시하고 사용자가 무엇이든하면 콜백을 제거하십시오. 같은 아래의 코드는 제대로 Handler을 사용하는 방법을 보여줍니다하지만 당신은 당신의 자신의 :

Runnable action = new Runnable(){ 

    public void run(){ 
     //... 
    } 
}; 

mHandler.postDelayed(action, 3000); 
if(userDone){ 
    mHandler.removeCallbacks(action); 
    mHandler.post(action); 
} 
+0

흠. mHandler가 올바르게 이해한다면 3 초에 메시지 대기열에 작업이 추가됩니다. 그러나 userDone 인 경우 mHandler는 해당 작업 요청을 취소하고 Android에 메시지 대기열에 작업을 추가하도록 지시합니다. 그 맞습니까? 또한 userDone = true 일지 궁금해 할 경우 if 문 다음의 코드보다 먼저 실행되도록 보장 할 수 있습니까? 대기열에 대한 아이디어는 항상 타이밍 오류 및 경쟁 조건으로 인해 나를 걱정합니다. – f20k

+0

핸들러에 대한 이해가 정확하지만 두 번째 질문은 분명하지 않습니다. 당신이 mHandler.post (action)를 호출하면, 당신이 묻고있는 runnable을 확실히 실행할 것입니다 ... – schwiz

+0

답장을 보내 주셔서 감사합니다. 두 번째 부분을 명확히하기 위해 : if 문 뒤에 코드가 있고 mHandler.post (action)가 실행되었다고합니다. 내 코드를 실행하기 전에 조치가 취해질 수 있습니까? – f20k

0

이 클래스를 사용하지 마십시오에 알아낼해야 사용자가 작업을 할 수 있도록 반복되지 않는다 취소 방법에 경주가 포함되어 있습니다. https://code.google.com/p/android/issues/detail?id=58668

onTick과 취소 사이에 경주가있을 경우 취소 할 수 없습니다.

인종없이 처음부터 구현하는 것이 좋습니다. 다른 경우 공식 수정이있을 때까지 문제가 발생합니다.

관련 문제