마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

handler 내의 메시지 개수 확인

0 추천
handler.sendEmptyMessageDelayed()라는 함수에 관한 질문입니다.

위 함수를 타이머로 사용하고 있는데, 만약에 저 함수를 여러 번 호출하면 메시지는 여러개가 되나요?

 

다시 말해,

handler.handleMessage()를 구현하고

아래에서

sendEmptyMessageDelayed(0, 100);

sendEmptyMessageDelayed(0, 200);

sendEmptyMessageDelayed(0, 300);

 

이렇게 호출하면 handleMessage()가 100ms 후에 한번, 200ms 후에 한번, 300ms 후에 한번

이렇게 총 세번 실행되나요?

 

(맞다면) 핸들러가 가지고 있는 메시지 개수를 확인하는 방법이 궁금합니다.
소다나 (600 포인트) 님이 2013년 5월 22일 질문

2개의 답변

0 추천
 
채택된 답변

세번 호출 되는게 맞습니다.

 

위데로 하면  sendEmptyMessageDelayed(0, 100); 후 0.1초 후에 sendEmptyMessageDelayed(0, 200);를 타고 또 0.1 초후에 sendEmptyMessageDelayed(0, 300);게 실행 됩니다.

일단 한번에 쭉~ 읽습니다.

앙스 (1,020 포인트) 님이 2013년 5월 22일 답변
소다나님이 2013년 5월 22일 채택됨
역시 그렇군요ㅜㅜ
혹시 그럼 한개만 남겨두려면
메시지 코드를 다르게 설정해서

 sendEmptyMessageDelayed(0, 100);
 ...
 if( foo )    {
      handler.removeMessage(0);
      handler.sendEmptyMessageDelayed(1, 100);
 }


이런 식으로 처리하면 맨 마지막에 부른 메시지만 남을까요?
근데 한번에 쭉 읽는다고 해서 여쭤보는건데,
내려가면서 순차적으로 메시지 대기시켜두는 거 아닌가요?ㅜ
본문의 예 상으로 세줄이 붙어있어서 그 시간적 차이가 거의 없어서 그렇게 말씀하신건지
아니면 정말 순차적이 아니라 한꺼번에 로드시키는 건지 궁금합니다...
public void a (){
sendEmptyMessageDelayed(0, 100);

sendEmptyMessageDelayed(0, 200);

sendEmptyMessageDelayed(0, 300);
}

이렇게 있다고 생각해 보면 a 메소드를 타는순간 순차적으로 읽게 되겠져. 하지만 인간이 느낄수 없는 속도로 잃게 됩니다.  sendEmptyMessageDelayed(0, 100);를 읽고 0.1초 뒤에 handle에 적용되는게 아닙니다. 순차적으로 다읽으면  sendEmptyMessageDelayed(0, 100);는 0.1초 뒤에 실행되고  sendEmptyMessageDelayed(0, 200);는 0.2초 뒤에 실행되는것 입니다. 그러니  sendEmptyMessageDelayed(0, 100);가 실행하고 0.1초 뒤에  sendEmptyMessageDelayed(0, 200);가 실행되는것입니다.
delayed가 중요한게 아닙니다. delayed나 waht 매개변수와 상관없이 순차적으로 읽습니다. delayed는 말그대로 해당 명령어를 읽고 몇초후에 실행할꺼냐를 묻는 것입니다.
0 추천
delay 안줘도 순차적으로 실행 됩니다.
aucd29 (218,390 포인트) 님이 2013년 5월 22일 답변
...