2013-12-18 1 views
0

핸들러를 사용하여 postDelayed() 핸들러를 사용하여 7 초 동안 타이머를 시작합니다. 이 간격 동안 서버에서 응답을 받으면 타이머를 중지합니다. 응답이 7 초 이내에 수신되지 않으면 오류가 표시됩니다. 나는 목적이전 핸들러가 중지되고 새로 시작됩니다

handler = new Handler(); 

Runnable wait4TO = new Runnable(){ 
    @Override 
    public void run() { 
     if(pressedButton==INACTVE) ; 
     // if reply is recieved pressedbutton will be INACTIVE 

     else 
     { 
      sentFailed(); 
     } 

    } 
}; 

handler.postDelayed(wait4TO, 7000); 

이 코드를 사용하고

이 제대로 작동하지만 다른 메시지가 전송되는 경우 나는이 시간 제한을 취소하고 새로 시작하거나 다른 7 초에 대한 기존의 제한 시간을 연장 할 수 있습니다. 어떻게 이것을 달성 할 수 있습니까?

handler.removeCallbacks(wait4TO)handler.removeCallbacks(null)을 사용하여 처리기를 취소했지만 성공하지 못했습니다. 이전 핸들러가 여전히 실행됩니다

+0

이상합니다. 핸들러 객체의 인스턴스가 하나 뿐이겠습니까? – Blackbelt

+0

@blackbelt 메시지를 보낼 때마다 위 코드가 호출됩니다. – dmSherazi

+0

그래서 보내는 메시지마다 새 처리기를 만드시겠습니까? – Blackbelt

답변

2

removeCallbacks 작품입니다. 사실 모든 처리기가 자체 대기열로 있고, 사용자가 원하는대로 처리하기 위해 처리기 인스턴스가 하나만 필요하다는 사실을 알고 있어야합니다.

2

그래서 어쩌면 당신은 실행 가능한

boolean flag=true; 

Runnable wait4TO = new Runnable(){ 
    @Override 
    public void run() { 
if(!flag) 
return; 
     if(pressedButton==INACTVE) ; 
     // if reply is recieved pressedbutton will be INACTIVE 

     else 
     { 
      sentFailed(); 
     } 

    } 
}; 

handler.postDelayed(wait4TO, 7000); 

체크 플래그를 추가하려고 그리고 당신은 false로 당신 만 설정 플래그를 비활성화 할 때

결국

handler.removeCallbacs (wait4TO)을 시도;

+0

감사합니다. 나는 그것을 작동 시켰어. – dmSherazi

관련 문제