'2018/05/15'에 해당되는 글 1건

728x90

뒤로 버튼을 두번 누르면 앱이 자동 종료되는 제대로 된 코드다.

인터넷 뒤져보면 제대로 동작하는 코드를 찾기 어렵다.

최근 앱 사용목록을 보면 종료되어 있지 않고 앱의 화면이 남이 있는 경우가 많다.

아래 코드는 최근 앱 사용목록에도 보이지 않고 종료된다.

만약 뒤로 가기 버튼 2번 누르지 않고 바로 종료하도록 하고자 한다면, appShutdown() 의 접근 제한자를 public 으로 변경하고 이 함수를 바로 호출하면 된다.


 import android.app.Activity;
import android.os.Build;
import android.widget.Toast;

public class BackPressHandler {
    private long backKeyPressedTime = 0;
    private Toast toast;

    private Activity activity;

    public BackPressHandler(Activity activity) {
        this.activity = activity;
    }

    public void onBackPressed() {

        if (isAfter2Seconds()) {
            backKeyPressedTime = System.currentTimeMillis();
            // 현재시간을 다시 초기화

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

            return;
        }

        if (isBefore2Seconds()) {
            appShutdown();
            toast.cancel();
        }
    }

    private Boolean isAfter2Seconds() {
        return System.currentTimeMillis() > backKeyPressedTime + 2000;
        // 2초 지났을 경우
    }

    private Boolean isBefore2Seconds() {
        return System.currentTimeMillis() <= backKeyPressedTime + 2000;
        // 2초가 지나지 않았을 경우
    }

    private void appShutdown() {
        if (Build.VERSION.SDK_INT >= 21) {
            activity.finishAndRemoveTask(); // Activity를 종료하고 최근 앱 사용 목록에서도 해당 앱을 제거
        } else {
            activity.finish();
        }
        System.runFinalization(); // 작업중인 쓰레드가 다 종료되면, 종료 시키라는 명령어
        System.exit(0); // 현재 Activity 종료
    }
}


사용법

 public class Main extends Activity {
    private BackPressHandler backPressHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        backPressHandler = new BackPressHandler(this); // 뒤로 가기 버튼 이벤트

    } // onCreate End

    @Override
    public void onBackPressed() {
        backPressHandler.onBackPressed();
    }

}



블로그 이미지

Link2Me

,