앱 만들기/안드로이드

액티비티 스택 - 플래그 - FLAG_ACTIVITY_CLEAR_TOP

나도 처음이야 2021. 2. 2.

액티비티 이동 시 

FLAG_ACTIVITY_CLEAR_TOP 를 사용하면, 이동 하고자 하는 Acitivity 를 스택 최상단에 남겨두고

해당 Activity 위에 존재하는 화면들은 모두 삭제하게 된다.

그림을 보자.

 

Activity3->MainAcitivity 로 이동시.플래그 값 세팅한 결과

위와 같은 상황에서

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

 

해당 플래그를 적절히 활용하시어, 화면이동을 해보면 되겠습니다.

감사합니다. :)

반응형

댓글