뒤로가기를 두번 눌러서 앱을 종료하기

 

뒤로가기를 한번 눌러서 앱이 종료되면 불편한 점이 종종 있다.

 

네이티브 앱의 경우는 뒤로가기 버튼이 이전 activity 로 전환되는 것이 기본 동작이다.

 

하지만 사용자가 임의로 뒤로가기 버튼의 함수를 변경할 수 있다.

 

뒤로가기 버튼을 별도로 화면에 구성하고 기존에 디바이스 ( 스마트폰 ) 의 뒤로가기 버튼을 종료버튼으로 사용하는 등을 예로 들 수 있겠다.

 

http://galaxy-note2.wonderhowto.com/how-to/swap-menu-back-buttons-your-samsung-galaxy-note-2-for-easier-left-handed-navigation-0146943/

 

그래서 뒤로가기 버튼을 종료 기능 또는 뒤로가는 기능의 버튼으로 사람마다 다르게 습관화 되어 있을 수 있다.

 

 

뒤로가기 버튼을 뒤로가는 기능으로 많이 사용하던 사람은 이전 화면으로 가기 위해 뒤로가기 버튼을 누를 수 있고 그 때 한번애 앱이 종료된다면 불편할 수 있다.

 

이 단점을 보완하기 위해서는 여러가지 방법으로 구현할 수 있다.

 

다이얼로그를 생성해서 진짜 앱을 종료할 것인지 물어보는 방법Toast 를 띄워서 한번 더 누르면 종료된다는 것을 알려주는 방법 등이 있겠다.

 

 



 

뒤로가기 버튼을 두번 눌러서 앱을 종료하도록 유도해 보자.

아주 기본적인 기능을 가지고 구현했기 때문에 자세한 소스 설명은 생략한다.

 

Handler 만들기

먼저 뒤로가기를 두번 눌러서 종료시키는 기능을 별도의 Class 를 만들어서 구현한다.

Class 명은 BackPressCloseHandler 이라고 만들었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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) {
            toast.cancel();
 
            Intent t = new Intent(activity, MainActivity.class);
            activity.startActivity(t);
            
            activity.moveTaskToBack(true);
            activity.finish();
            android.os.Process.killProcess(android.os.Process.myPid());
        }
    }
 
    public void showGuide() {
        toast = Toast.makeText(activity, "한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT);
        toast.show();
    }
 
}
cs

18# ~ 25# : 앱을 종료한다. 필자의 경우 MainActivity로 화면을 전환 후에 종료시킨다. 버전에 따라서 앱을 종료시키는 방법이 다를 수 있으니 주의 해야 한다.

 



 

사용하는 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MainActivity extends AppCompatActivity {
 
    private BackPressCloseHandler backPressCloseHandler;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // 뒤로가기 핸들러
        backPressCloseHandler = new BackPressCloseHandler(this);
    }
    
    @Override
    public void onBackPressed() {
        backPressCloseHandler.onBackPressed();
    }
 
}
cs

11# : 뒤로가기 BackPressCloseHandler 객체를 생성한다.

15# : 뒤로가기 버튼의 함수를 상속받는다.

16# : 뒤로가기 버튼을 실행할 함수를 입력한다. BackPressCloseHandler 의 함수를 호출한다.

by 개발자 CofS 2016.05.12 14:20
  • 익명 2017.01.02 21:33 신고 ADDR EDIT/DEL REPLY

    코드를 가져가서 앱을 만들 때 써도 될까요?

| 1 2 3 4 5 6 7 8 9 ··· 16 |