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

핸들러메시지 딜레이 줬을때 취소하는법

0 추천
핸들러.postDelayed로 딜레이를 15초 주고 Runnable를 호출합니다.

 

15초뒤에 호출되는거죠

 

그런데 중간에 특정 이벤트가 발생하면 메시 전송을 취소하고싶습니다.

 

예를 들어 1버튼 클릭시 15초뒤에 Runnable가 호출되는데

1버튼 클릭 후 2버튼 클릭시 1버튼에서의 15초뒤호출이 취소되는 기능을 구현하고싶습니다

 

어떻게 해야하나요 ?
음무 (17,820 포인트) 님이 2014년 3월 4일 질문

3개의 답변

+1 추천
 
채택된 답변
aucd29 (218,390 포인트) 님이 2014년 3월 4일 답변
음무님이 2014년 3월 4일 채택됨
저도 removeCallback하면 되는걸로 알고있었는데
적용하니 안되네요 .. 여전히 15초뒤에 호출되버립니다
링크 안에 댓글을 봐보세요
감사합니다!

mHandler.removeCallbacksAndMessages(null);

하니 되네요

근데 하나의 콜백함수만 지정해서 멈추려면 플래그로 체크하는방법밖에없을까요 ?
-_ -; 글쎄요 먼가 이벤트를 발생해서 callback 함수에서 remove 시키는 방법 밖에 없을 듯 한데요
+1 추천
아래 참고해 보세요.
 
private final int MESSAGE_WHAT = 1;
 
Handler handler= new Handler(new Handler.Callback() {
 
    @Override
    public boolean handleMessage(Message msg) {
        // TODO Auto-generated method stub
        if(msg.what == MESSAGE_WHAT){
            new Runnable() {
 
                @Override
                public void run() {
                // TODO Auto-generated method stub
 
                }
             };
        }
        return false;
    }
});
 
private void sendDelayMessage(){
    Message msg = handler.obtainMessage(MESSAGE_WHAT);
    handler.sendMessageDelayed(msg, 15000);
}
 
private void removeMessage(){
    handler.removeMessages(MESSAGE_WHAT);
}
코딩인헬 (12,150 포인트) 님이 2014년 3월 4일 답변
0 추천
mHandler.removeCallbacks(Runnable runnable);
익명사용자 님이 2016년 6월 22일 답변
...