안규 공부방

Android > Back button 2번 클릭시 종료 시키는 로직 - onBackPressed() 메소드 + Handler

등록일 : 2017-07-06 17:22 조회수 : 93,684

이번에는 어플을 개발하면 한 번 검색할까 말까한 2번 백버튼으로 어플리케이션을 종료하는 것을 알아 보도록합시다.

간단하게 소스코드를 보면 모든 것이 이해가 되기때문에 여러가지 말은 하지 않을 것입니다.
 
	public class MainActivity extends Activity {
		
		// define variables for back key : 2 pressed end! 
		private boolean isBackKeyPressed = false;             // flag
		private long currentTimeByMillis = 0;                     // calculate time interval
		
		private static final int MSG_TIMER_EXPIRED = 1;    // switch - key
		private static final int BACKKEY_TIMEOUT = 2;      // define interval
		private static final int MILLIS_IN_SEC = 1000;        // define millisecond 
		// end of back key variable.
		
		@Override
		protected void onCreate(Bundle savedInstanceState) {
			super.onCreate(savedInstanceState,R.layout.activity_main);

		}

		/*
		 * onBackPressed function override
		 *  - back 1 click : 2번 누르면 종료되게 메세지 출력 
		 *  - back 2 click : 2번 누르면 종료
		 */
		@Override
		public void onBackPressed(){
			if ( isBackKeyPressed == false ){
				// first click
				isBackKeyPressed = true;
				
				currentTimeByMillis = Calendar.getInstance().getTimeInMillis();
				Toast.makeText(this, "\'뒤로\'버튼을 한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show();
				
				startTimer();
			}else{
				// second click : 2초 이내면 종료! 아니면 아무것도 안한다.
				isBackKeyPressed = false;
				if ( Calendar.getInstance().getTimeInMillis() <= (currentTimeByMillis + (BACKKEY_TIMEOUT * MILLIS_IN_SEC)) ) {
					finish();
				}
			}
		}
		
		// startTimer : 2초의 시간적 여유를 가지게 delay 시킨다.
		private void startTimer(){
			backTimerHandler.sendEmptyMessageDelayed(MSG_TIMER_EXPIRED, BACKKEY_TIMEOUT * MILLIS_IN_SEC);
		}
		
		private Handler backTimerHandler = new Handler(){
			public void handleMessage(Message msg){
				switch( msg.what ){
					case MSG_TIMER_EXPIRED:{
						isBackKeyPressed = false;
					}
					break;
				}
			}
		};
		// End of Back method
	}
	
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.