Activity Stack
안드로이드 앱에서는 새로운 액티비티가 실행될 때마다 기존에 사용하던 액티비티는 스택에 쌓이게 된다.
이를 Activity Stack이라고 하며 현재 액티비티가 종료되면 스택의 맨 위에 놓여져 있는 액티비티가 나타나게 된다.
하지만 이렇게 액티비티가 쌓이는 과정에서 우리가 의도하지 않은 결과가 나타날 수 있다.
이 때 Intent의 Flag를 통해 어떻게 해결할 수 있는지 알아보자.
Intent Flag 사용법
Intent intent = new Intent(getApplicationContext(), NewActivity.class);
// 플래그 지정
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
// 플래그 추가
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
Intent에 flag를 설정하는 법은 간단하다.
기존의 flag들을 삭제하고 설정할 때는 setFlags() 함수를,
기존의 flag들에 새로운 flag를 추가할 때는 addFlags() 함수를 사용하면 된다.
※ flag는 이진수로 구성된 정수이기 때문에 setFlags() 함수는 대입(=), addFlags() 함수는 or(|) 연산을 수행한다.
그렇다면 자주 사용되는 flag와 각각의 용도를 알아보자.
Intent Flag 종류
FLAG_ACTIVITY_SINGLE_TOP
똑같은 액티비티가 두번 연달아 실행될 경우, 사용자가 액티비티를 종료해도 같은 액티비티가 나타날 수 있다.
이 때 FLAG_ACTIVITY_SINGLE_TOP 플래그를 사용하면 같은 액티비티가 여러 번 쌓이는 것을 막을 수 있다.
※ 같은 액티비티가 재사용되기 때문에 onCreate가 호출되지 않고 onNewIntent가 실행되는 것에 주의해야 한다.
FLAG_ACTIVITY_NO_HISTORY
새로운 액티비티를 실행할 때 이전에 사용하던 액티비티를 종료하고 싶을 때가 있다.
FLAG_ACTIVITY_NO_HISTORY 플래그를 사용하면 새 액티비티를 실행할 때 이전 액티비티를 스택에 저장하지 않는다.
FLAG_ACTIVITY_CLEAR_TOP
그렇다면 그동안 쌓여있던 액티비티를 모두 종료하고 싶다면?
FLAG_ACTIVITY_CLEAR_TOP 플래그를 사용하면 그동안 스택에 쌓여있던 모든 플래그를 지울 수 있다.
Reference
[부스트코스]안드로이드 프로그래밍
'Android > Concepts' 카테고리의 다른 글
Activity Lifecycle(수명주기)란? (0) | 2020.04.03 |
---|---|
Intent를 이용한 Activity 간 데이터 전달 (0) | 2020.04.03 |
Intent란? (0) | 2020.03.31 |
Activity란? (0) | 2020.03.31 |
GridView 사용법 (0) | 2020.03.24 |