앱 만들기/안드로이드 study

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

나도처음이야 2021. 1. 24.

soo0100.tistory.com/1391

 

액티비티 스택 - 플래그 값이 없을때 (기본 설정)

안드로이드 액티비티는 기본적으로 스택 구조를 가진다. 기본적이란 의미는 따로 인텐트 플래그 설정을 하지 않았을때, 즉 기본 설정이란 의미이다. 테스트를 위해 3개의 화면(액티비티) 을 MainA

soo0100.tistory.com

 

지난 시간, 액티비티 스택에 이어 

이번에는 FLAG_ACTIVITY_SINGLE_TOP 에 대해서 확인 해보자.

FLAG_ACTIVITY_SINGLE_TOP

플래그는 하기 구글 API 문서의 내용 대로,

액티비티 스택의 가장 위 에 호출하려고 하는 액티비티가 설정되어 있으면 다시 호출 하지 않는다는 설정이다.

 

If set, the activity will not be launched if it is already running at the top of the history stack.

https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_SINGLE_TOP

 

Intent  |  Android 개발자  |  Android Developers

 

developer.android.com

FLAG_ACTIVITY_SINGLE_TOP 기본 개념은 하기와 같다.

액티비티 스택 최상단에 Activity2 번이 있을 경우, 또 다시 Activity2 번을 호출하면

새로 만들어지는 것이 아니고 기존 Activity2 가 불려진다.

 

FLAG_ACTIVITY_SINGLE_TOP - 최상단에 이미 동일한 화면이 있으면 새로 만들지 않는다

 

안드로이드 스튜디오를 통해 확인 해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
  public void onButtonPressed2(View view){
        Intent intent = new Intent(this, Activity2.class);
        intent.addFlags(intent.FLAG_ACTIVITY_SINGLE_TOP);
        startActivity(intent);
    }
 
D/test: MainActivity-onPause
D/test: Activity2-onCreate
D/test: Activity2-onResume
 
//intent.addFlags(intent.FLAG_ACTIVITY_SINGLE_TOP);
D/test: Activity2-onPause
D/test: Activity2-onResume
cs

1. MainActivity -> Activity2 -> Activity2 로 이동 시

   Activity2 에서 Activity2 를 호출시 FLAG_ACTIVITY_SINGLE_TOP 플래그 를 설정하였다.

   결과는 Activity2 의 onPause() -> onReusme() 함수를 호출한다.

   즉, 새롭게 만들지는 않는다는 것이다. Activity2 를 반복적으로 호출하여도 결과는 동일하다.

 

2. Activity2 -> MainActivity -> 앱 종료

   백 키로 앱 종료시에는 화면별로 종료가 됨을 확인 할 수 있다.  

1
2
3
4
5
D/test: Activity2-onPause
D/test: MainActivity-onResume
D/test: Activity2-onDestroy

D/test: MainActivity-onPause
D/test: MainActivity-onDestroy
cs

 

FLAG_ACTIVITY_SINGLE_TOP 플래그는 액티비티 이동 중 최상단 화면의 중복된 호출을 원치 않을때도

유용하게 사용할 수 있다.

각자 상황에 맞게 잘 활용하면 되겠습니다.

감사합니다 :) 

반응형

댓글