본문 바로가기
안드로이드

안드로이드 Stack Clear

by 코딩히어로 2022. 3. 3.
728x90

여러 가지 페이지를 가진 어플을 구동 중에 Stack을 어떻게 정리하느냐에 따라서

뒤로 가기 버튼 및 어플을 종료하는 순서가 정해지게 됩니다.

 

이러한 스택은 Activity를 실행시켜줄 때 넘겨주는 intent에 설정합니다.

먼저 스택을 정리하는 Flag들에 대해 정리하도록 하겠습니다.


FLAG_ACTIVITY_CLEAR_TOP

Intent에 이 플래그가 설정되었을 경우, 현재 수행되는 태스크에서 새로운 Activity를 생성하는 대신 다른 Activity들을 닫혀서 해당 Activity가 top이 되도록 합니다.
FLAG_ACTIVITY_SINGLE_TOP

Stack의 루트에 이미 Activity가 있을 경우 새로 만들지 않고 루트에 있는 Activity에 onNewIntent() 메소드를 호출하여 Intent를 전달합니다.
onNewIntent() 메소드는 액티비티의 onPause() 메서드가 호출된 다음에 호출되며, onNewIntent() 메서드가 호출된 뒤에는 onResume() 메서드가 호출됩니다.
단독으로 사용 시 큰 의미가 없으며, Intent.FLAG_ACTIVITY_CLEAR_TOP과 같이 사용 시 의미가 있습니다.
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED

백그라운드의 TASK를 포그라운드로 가져올 때 사용합니다.
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET이 설정된 Activity를 제거합니다.
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

태스크가 백그라운드에서 포그라운드로 올라올 때 설정된 Activity를 스택에서 제거합니다.
플래그가 설정된 Activity와 호출한 Activity들도 자동으로 이 플래그가 설정됩니다.
FLAG_ACTIVITY_CLEAR_TASK

이 Activity와 관련된 TASK가 수행중이면 Activity가 수행되기 전에 다른 액티비티는 모두 종료됩니다.
이 플래그는 FLAG_ACTIVITY_NEW_TASK와 같이 사용합니다.
FLAG_ACTIVITY_NEW_TASK

기존에 해당 TASK가 없을 때 새로운 TASK를 만들면서 실행합니다.
실행하고자 하는 Activity와 관련 태스크가 존재할 경우 해당 태스크가 Foreground로 오고 해당 태스크 내에서 Activity가 실행됩니다.
FLAG_ACTIVITY_MULTIPLE_TASK와 함께 쓰일 경우는 다른 조건 보지 않고, 무조건 새로운 TASK를 생성합니다.
FLAG_ACTIVITY_MULTIPLE_TASK

이 플래그는 런쳐를 만들 때를 제외하고는 사용하지 않습니다.
FLAG_ACTIVITY_NEW_TASK와 함께 사용하면 기존에 태스크를 Foreground로 가져오는 것을 방지합니다.
기존에 동일한 TASK의 실행 유무와 상관없이 항상 새로운 태스크가 생성됩니다.

위에 내용을 토대로 Activity가 실행되었을 때 뒤로 가기 버튼을 누르면

이전 페이지로 돌아가지 않고 어플이 종료되도록 설정하려면 다음과같이 적용합니다.

 

Intent intent = new Intent(MainActivity.this, TestActivity.class);
intent.setFlags(intent.FLAG_ACTIVITY_NEW_TASK | intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

 

Activity를 실행하면서 이전 스택을 모두 날려주면 실행된 Activity가 최종이자

최상단에 존재하기 때문에 뒤로가기 버튼을 눌러도 이전 페이지가 존재하지 않기 때문에

어플을 종료할 수 있습니다.

728x90
반응형

댓글