티스토리 뷰

액티비티 스택은 기본적으로 일반적인 스택구조를 따른다. 액티비티1, 액티비티2, 액티비티3 이 있다고 했을 때, 이들을 차례대로 호출하면 아래와 같이 액티비티가 쌓인다.




그렇기 때문에 맨 마지막에 위치한 액티비티3가 현재 화면이고, 여기에서 뒤로가기를 탭하면 액티비티2가 보이고, 다시 뒤로가기를 하면 액티비티1가 보일 것이다.



Intent객체에는 setFlags(int flags)라는 메서드가 있는데 이 메서드를 활용하면 스택이 쌓이는 구조를 변경할 수 있다.



대표적인 플래그 값들은 다음과 같다.

플래그값

설명

비고

Intent.FLAG_ACTIVITY_NO_HISTORY

이 값을 설정해서 실행된 액티비티 이후에 실행되는 액티비티들은 스택에 쌓이지 않는다. 그렇기 때문에 현재 액티비티의 이전 액티비티는 항상 처음의 액티비티가 된다.

 

Intent.FLAG_ACTIVITY_CLEAR_TOP

액티비티 호출 시 스택에 기존에 사용하던 같은 액티비티가 있다면 그 액티비티를 사용하면서 스택에서 이 액티비티 위에 존재하는 액티비티들을 제거해준다

CLEAR_TOP플래그를 설정한 대상이 되는 액티비티

Intent.FLAG_ACTIVITY_SINGLE_TOP

액티비티가 쌓일 때, 이미 같은 액티비티가 스택에 있다면 그 액티비티를 그대로 사용하라는 플래그

 중복액티비티는 없음


<FLAG_ACTIVITY_NO_HISTORY> 예

예를 들어 액티비티1, 액티비티2, 액티비티3, 액티비티4가 있다면..


NO_HISTORY를 적용하지 않았을 경우

1 - 2 - 3 - 4 처럼 액티비티 스택에 차례대로 액티비티들이 쌓인다.

하지만 NO_HISTORY를 2에서 Intent에 적용하고.3으로 넘어갔을 경우..

1 - 2

가 된다. 3과 4는 화면에 보이지만 스택에 쌓이지 않는다. 결과적으로 최종 액티비티가 4이기 때문에 4가 마지막에 보이지만 여기에서 뒤로가기를 할 경우 스택의 마지막 액티비티가 2이기 때문에 액티비티2로 전환된다.



<FLAG_ACTIVITY_CLEAR_TOP> 예

여기서도 액티비티 1, 2, 3, 4가 있다고 친다.


1 - 2 - 3 - 4대로 호출한다고 했을 때, 4에서 2를 다시 호출할 때


CLEAR_TOP을 적용하지 않았을 때..

1 - 2 - 3 - 4 - 2가 쌓이겠지만


CLEAR_TOP을 적용했다면 호출하는 액티비티 이후에 존재하는 액티비티는 스택에서 지워지기 때문에.

1 - 2가 된다.




<FLAG_ACTIVITY_SINGLE_TOP> 예

여기서는 액티비티 1, 2가 있다고 친다.





Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday