안드로이드 스택 관리
Intent를 이용해 Activity를 이동할때 이전 Activity가 Stack에 쌓이게 된다. 이 Stack을 적절히 조절하는 방법이다.
-
첫번째 방법
Intent의 함수 setFlag를 이용하는 방법 setFlags : 이전에 설정된 flag를 대체한다.
-
두번째 방법
Intent의 함수 addFlag를 이용하는 방법 addFlags : 해당 Intent에만 Flag를 붙인다.
자주 사용되는 Flags 종류
-
FLAG_ACTIVITY_STANDARD
아무 flags도 지정하지 않았을 때 STANDARD가 호출
- - B C B 호출-> C B - B A - A -
FLAG_ACTIVITY_SINGLE_TOP
동일한 Activity가 호출된다면 이전 Activity를 종료하고 새로운 Activity만을 남긴다. 동일한 Activity가 연속적으로 사용되어야 적용되며 연속적으로 사용되지 않는다면 계속 쌓인다.
동일하지 않은 Activity 호출시
- - B A B 호출-> A B - B A - A 동일한 Activity 호출시
B Flag적용-> - B - B A - A -
FLAG_ACTIVITY_CLEAR_TOP
기존에 Stack에 쌓여있던 Acivity의 동일한 Activity가 호출 되면 해당 Activity 상위에 쌓여있는 Activity를 제거하며, RootActivity는 제거되지 않는다.
동일한 Activity 호출시
B Flag적용-> - B - B A - A 동일하지 않은 Activity 호출시
A Flag적용-> - B - - A - A 다른 위치의 Activity 호출시
E C호출-> - D - - C - C B - B A - A -
FLAG_ACTIVITY_REORDER_TO_FRONT
기존에 Stack에 쌓여있던 Activity와 동일한 Activity가 호출되면 무조건 동일한 Activity를 최상위로 올림
B - - C Flag 적용-> B B - C A - A -
FLAG_ACTIVITY_NO_HISTORY
새로 생성되는 Activity를 Task에 보존하지 않아 자동적으로 제거하고 싶은 Activity가 있을 때 사용(제거되기 전까지 Stack에는 존재함.) B에서 속성을 적용하고 C를 호출하면 C는 Task에서 보존되지않고 제거 시점은 D가 제거되는 시점에서 C가 같이 제거됨.
D D 제거-> - C Flag 적용-> - B - B A - A