본문 바로가기
Android/Concepts

Intent의 Flag 사용법

by JuHy_ 2020. 4. 2.

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

[부스트코스]안드로이드 프로그래밍

https://www.edwith.org/boostcourse-android

'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