- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 책리뷰
- posting
- KotlinInAction
- Android
- GIT
- n3문법
- pullrequest
- webflux
- 일본어문법
- 안드로이드
- 진짜학습지후기
- Kotlin
- 진짜일본어
- blog
- jlpt
- PR
- 코틀린
- CustomTab
- errorhandling
- 일본어기초
- ai
- 학습지
- 인공지능
- github
- androidstudio
- rxjava
- suspend
- 진짜학습지
- coroutine
- 책추천
코딩하는 개굴이
[안드로이드] Launch Mode 란? 본문
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 들과 상호작용하기 때문에 다음 포스팅에 함께 알아보도록 하자.
참고 링크
'안드로이드' 카테고리의 다른 글
Android Studio "This version of the Android Support plugin for IntelliJ IDEA (or Android Studio) cannot open this project ... 에러 해결 (0) | 2022.11.07 |
---|---|
[안드로이드] Activity의 생명주기 (0) | 2022.10.27 |
[안드로이드] Volley 의 간단한 사용법 (0) | 2022.09.12 |
[JAVA/안드로이드] Handler, Looper, Thread (0) | 2022.09.07 |
[안드로이드] SingleThread 상태와 MultiThread 상태 (0) | 2022.09.05 |