뒤로 버튼을 두번 누르면 앱이 자동 종료되는 제대로 된 코드다.
인터넷 뒤져보면 제대로 동작하는 코드를 찾기 어렵다.
최근 앱 사용목록을 보면 종료되어 있지 않고 앱의 화면이 남이 있는 경우가 많다.
아래 코드는 최근 앱 사용목록에도 보이지 않고 종료된다.
만약 뒤로 가기 버튼 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(); }
} |