주요글: 도커 시작하기
반응형

안드로이드에서 2회 연속 백버튼을 눌러서 앱을 종료시키는 경우가 흔한데, 이 기능은 많이 사용되므로 다음과 같이 별도 클래스로 기능을 분리하면 향후 기능 재사용이 편리하다.


public class BackPressCloseHandler {


private long backKeyPressedTime = 0;

private Toast toast;


private Activity activity;


public BackPressCloseHandler(Activity context) {

this.activity = context;

}


public void onBackPressed() {

if (System.currentTimeMillis() > backKeyPressedTime + 2000) {

backKeyPressedTime = System.currentTimeMillis();

showGuide();

return;

}

if (System.currentTimeMillis() <= backKeyPressedTime + 2000) {

activity.finish();

toast.cancel();

}

}


private void showGuide() {

toast = Toast.makeText(activity, "\'뒤로\'버튼을 한번 더 누르시면 종료됩니다.",

Toast.LENGTH_SHORT);

toast.show();

}


}


BackPressCloseHandler의 구현은 간단하다.

  • backKeyPressedTime은 백버튼이 눌린 마지막 시간을 기록한다.
  • onBackPressed() 메서드는 현재 시간이 마지막 백버튼 누른 시간으로부터 
    • 2초 이상 지났으면, 마지막 백버튼 눌린 시간을 현재 시간으로 갱신하고 showGuide()를 실행한다.
    • 2초 이상 지나지 않았으면, Activity를 종료한다.
    • 참고로, 2초는 Toast.LENGTH_SHORT의 기본 값이다.
  • showGuide() 메서드는 Toast를 이용해서 메시지를 출력한다.

2회 연속 백버튼 누를 때 종료시키고 싶은 Activity가 있다면, 다음과 같이 사용한다.

  • BackPressCloseHandler 타입의  backPressCloseHandler 필드를 추가한다.
  • onCreate() 메서드에서 BackPressCloseHandler 객체를 생성해서 필드에 할당한다.
  • onBackPressed() 메서드에서 backPressCloseHandler.onBackPressed()를 호출한다.
아래 코드는 실제 적용한 코드의 일부를 발췌한 것이다.


public class HomeActivity extends Activity ... {


private BackPressCloseHandler backPressCloseHandler;


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.home_layout);

...

backPressCloseHandler = new BackPressCloseHandler(this);

}


@Override

public void onBackPressed() {

backPressCloseHandler.onBackPressed();

}

}


+ Recent posts