코딩하는 개굴이

[안드로이드] Launch Mode 란? 본문

안드로이드

[안드로이드] Launch Mode 란?

개굴이모자 2022. 10. 26. 22:40
반응형

Android Manifest 에서 LaunchMode 라는 것을 본 적이 있을 것이다.

아래와 같이 activity 의 옵션으로 들어가는 것 중 하나로, 각 액티비티를 시작하는 방법을 지정하는 것이다.

(스포이지만, exported 설정에 대해서는 차후의 포스팅에서 다루도록 하겠다.)

 

아래 중 총 4가지 중 하나로 설정할 수 있다.

  • standard
  • singleTop
  • singleTask
  • singleInstance

 

각각에 대해 간략하게 알아보도록 하자.

 

 

[참고!] 하위 설명들은 편의를 위해 A, B, C... 액티비티들이 존재하며 그 중, A 액티비티가 특정 launchMode의 설정임을 가정합니다.
A > B > C 의 표현은 액티비티 스택을 의미하며, A 액티비티 위 B가, B 액티비티 위에 C 가 쌓여있는 상태를 뜻합니다.

 

Standard

launchMode를 명시적으로 지정하지 않으면 자동으로 적용되는 default 값으로 가장 많이 사용되는 속성이다.

시스템이 항상 작업(Task)에 대해 새 액티비티 인스턴스를 생성하고 해당 인텐트를 해당 인스턴스로 라우팅한다.

즉, 만일 해당 설정에서 Activity 생성 버튼을 2번 누르면 A > B > A > A 의 상태가 가능하다는 말이다.

(비록 이미 탑에 동일한 인스턴스가 있더라도 말이다 :o)

 

SingleTop

같은 작업이 최상단에 존재할 경우, 새 것을 생성하지 않고 생성된 것을 재사용한다.

즉, 액티비티 스택의 탑에 이미 같은 인스턴스가 있으면 해당 인스턴스는 onNewIntent를 사용하여 그대로 사용한다.

만일, 해당 설정에서 이미 A > B > A 인 상태에서 A 를 호출해본다면 Standard 와는 달리 A > B > A 상태가 유지된다.

해당 상태는 자주 사용되거나 외부에서 들어올 가능성이 있는 경우 주로 사용된다.

 

 

SingleTask

같은 작업은 같은 스택에 하나만 존재하게 하는 설정으로, SingleTask 를 준 액티비티를 실행시키면 반드시 새로운 stack 을 만들어 루트 인스턴스가 된다. 

만일 B > C 의 스택이 존재하는 상황에서 SingleTask 의 설정을 가진 A 를 호출한다고 하면 B > C / A 의 상태로 두개의 스택이 만들어지게 된다. A는 스스로 만든 스택을 다른 인스턴스들과 공유하기 때문에 A 위에 B 가 올라올 수도 있다.

B > C / A 인 상태에서 만일 C 가 A 를 호출해야하는 상황이 생겼다고 가정하면 onNewIntent 로 재활용하여 사용한다.

(좀 까다롭다... 그렇지만 SingleInstance 가 더욱 까다롭다.)

 

 

SingleInstance

SingleInstance 는 SingleTask 와 동일하게 호출될 때 새로운 스택을 만들어 인스턴스를 넣지만, 본인이 만든 스택에 다른 인스턴스가 들어오는 것을 허용하지 않는다. 따라서, 위의 SingleTask 의 예시와 동일한 환경과 비교해보면 아래와 같다.

만일 B > C 의 스택이 존재하는 상황에서 SingleInstance 의 설정을 가진 A 를 호출한다고 하면 B > C / A 의 상태로 두개의 스택이 만들어지게 된다. A는 스스로 만든 스택을 다른 인스턴스들과 공유하지 않기 때문에 A 위에 B 가 올라올 수 없다.

 

 

 

singleTask 및 singleInstance 는 다른 애플리케이션과의 상호작용을 목적으로 주로 사용되기 때문에 대부분의 애플리케이션 및 그 외의 용도에 적합하지 않다. 또한, launchMode 는 Intent Flag 들과 상호작용하기 때문에 다음 포스팅에 함께 알아보도록 하자.

 

 

참고 링크

 

반응형
Comments