티스토리 뷰
액티비티 스택은 기본적으로 일반적인 스택구조를 따른다. 액티비티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가 있다고 친다.
'Android > 정리' 카테고리의 다른 글
수명주기 테스트 코딩 그리고 SharedPreferences인터페이스 (0) | 2016.05.24 |
---|---|
액티비티 라이프사이클(수명주기) (0) | 2016.05.17 |
인텐트 (0) | 2016.05.10 |
화면 이동과 데이터 전달 (0) | 2016.05.09 |
레이아웃 인플레이션 (0) | 2016.05.09 |