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

Handler.sendEmptyMessageAtTime에서 시간 지정 질문.

0 추천

백버튼을 누번 눌러서 액티비티를 종료시키는 예제를 작성하고 있습니다. 

public boolean mBackPress = false;


public void onBackPressed() {
		if(!mBackPress){
			mBackPress=true;
			mHandler.sendEmptyMessageAtTime(123,5000);
		}else{
			finish(); 
		}
		return;
	}



private Handler mHandler = new Handler() {
		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 123:
				Log.e("","!!!");
				mBackPress = false;
				break;
			}
		}
	};

 

위와 같이 코드를 작성하였습니다.

근데 로그를 찍어보니 5초있다가 핸들러메세지가 호출되는게 아니라.. 바로바로 호출이 되네요.

백버튼을 누르자마자 로그에 !!!가 찍힙니다. 

마구마구 백버튼을 눌러도.. finish()로는 안가네요....ㅠㅠ 

 

혹시 이거 왜 이런지 아시는분 답변 부탁드립니다. 

(안드로이드 2.3.3)

 

블랙이요블랙 (12,860 포인트) 님이 2013년 3월 15일 질문

1개의 답변

+1 추천
 
채택된 답변

5초안에 백버튼이 다시 눌리면 종료되게 만드시는거군요

sendEmptyMessageDelayed를 사용해 보세요

sendEmptyMessageAtTime은 해당 시간에 핸들러에 메세지를 보내는 함수네요.

@Override
public void onBackPressed() {
     if (mIsFinish) {
          super.onBackPressed();
     } else {
          mIsFinish = true;
          mFinishHandler.sendEmptyMessageDelayed(0, 5000);
     }
}
 
private Handler mFinishHandler = new Handler() {
     @Override
     public void handleMessage(Message msg) {
          mIsFinish = false;
     }
};
Bandroid (1,800 포인트) 님이 2013년 3월 15일 답변
블랙이요블랙님이 2013년 3월 25일 채택됨
...