액티비티 이동 시
FLAG_ACTIVITY_CLEAR_TOP 를 사용하면, 이동 하고자 하는 Acitivity 를 스택 최상단에 남겨두고
해당 Activity 위에 존재하는 화면들은 모두 삭제하게 된다.
그림을 보자.
위와 같은 상황에서
Acitivy3 에서 MainAcitivity 로 바로 이동을 하고 싶을때
FLAG_ACTIVITY_CLEAR_TOP 플래그를 사용하면 좋은 해결 방법이 될 수 있습니다.
MainActivity 로 이동하면서 Activity2 는 스택에서 삭제하게 되니 말이죠.
실행결과로 확인 해보겠습니다.
1. Activity3 -> MainActivity 로 이동시 FLAG_ACTIVITY_CLEAR_TOP 설정하기.
1
2
3
|
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
|
cs |
2. 결과 확인 하기.
1
2
3
4
5
6
|
D/test: Activity3-onPause
D/test: Activity2-onDestroy
D/test: MainActivity-onDestroy
D/test: MainActivity-onCreate
D/test: MainActivity-onResume
D/test: Activity3-onDestroy
|
cs |
결과내용 처럼,
Activity3 은 결국 destory 됩니다.
Activity2 도 스택에서 사라집니다.
최종적으로 MainActivity 가 남게됩니다.
(이때, MainActivity 는 삭제하고 새로 그리게 됩니다)
3. MainActivity 를 다시 그리지 않고 이동하기
MainActivity 를 다시 그리지 않고, 기존 스택에 쌓여있던 MainActivity 를 사용하기 위해서는
하기 처럼 플래그를 세팅하면 됩니다.
1
2
3
|
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TOP | intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
|
cs |
FLAG_ACTIVITY_SINGLE_TOP 플래그를 추가 함으로써,
이동하는 화면이 스택 최상단이라면 기존 사용했던 액티비티를 사용하라는 의미를 더 한 것입니다.
결과는 하기와 같습니다.
MainActivity 의 onResume 함수를 호출하여 기존 MainActivity 를 재 사용하고 있습니다.
1
2
3
4
5
6
|
D/test: Activity3-onPause
D/test: Activity2-onDestroy
D/test: MainActivity-onResume
D/test: Activity3-onDestroy
|
cs |
해당 플래그를 적절히 활용하시어, 화면이동을 해보면 되겠습니다.
감사합니다. :)
'앱 만들기 > 안드로이드 study' 카테고리의 다른 글
Json 파일이란? (2) | 2021.02.12 |
---|---|
애드몹 광고가 나오지 않는다면... (4) | 2021.02.05 |
액티비티 스택 - 플래그 - FLAG_ACTIVITY_SINGLE_TOP (2) | 2021.01.24 |
액티비티 스택 - 플래그 값이 없을때 (기본 설정) (1) | 2021.01.23 |
안드로이드 스튜디오 특수문자 입력하기 (4) | 2021.01.22 |
댓글