Android Developer

[Android] Activity의 LaunchMode

졸려질려 2019. 7. 10. 01:15
반응형

LaunchMode

  • 액티비티 실행시 쌓이는 액티비티 스택에 대한 운영 방식 을 설정하는 모드 이다.
  • 하나의 액티비티 스택 == 태스크 ( Task ) == 백스택
  • 모드에 따라 하나의 태스크 또는 여러 개의 태스크에서 어플리케이션이 실행될 수 있다.
  • LaunchMode는 총 4개이며, manifestactivity 요소의 android:launchMode 속성으로 지정할 수 있다.
  • 액티비티에 LaunchMode 값을 지정하지 않는다면 기본 값인 standard 가 들어가게 된다.

다중 인스턴스 지원 여부에 따른 분류

  • 지원 有 : standard, singleTop ( singleTop 은 조건부 지원 )
    대부분의 액티비티에 대한 일반적인 시작
  • 지원 無 : singleTask, singleInstance
    특수한 시작 ( 일반 용도로는 권장되지 않음 )

1. standard

  • 기본적으로 설정되는 값이다.
  • 항상 액티비티 스택을 쌓아 올린다.

2. singleTop

  • 액티비티의 인스턴스가 이미 태스크의 맨 위에 존재 할 경우 새 액티비티 인스턴스를 생성하지 않고 onNewIntent() 메서드를 호출하여 기존의 액티비티 인스턴스를 재활용한다.
  • 시나리오 설정
    • Astandard 모드이며 Intro 화면 및 외부 스키마 처리를 수행하기 위해 가장 먼저 실행되는 액티비티
    • BsingleTop 모드이며 메인 액티비티
  • 시나리오
    • 그림 1,2 : 최초로 어플리케이션을 실행하게 되면 A, B 액티비티의 새 인스턴스를 생성한다.
    • 그림 3,4 : 외부 앱을 통해 다시 해당 어플리케이션을 호출하면 가장 먼저 A 액티비티가 실행된다. A 액티비티는 launchMode가 standard 이기 때문에 인스턴스를 새로 생성한다. 그리고 A 액티비티는 B 액티비티를 호출한다. 이 때 최상위 스택 액티비티 가 B 액티비티이기 때문에 A 액티비티는 B 액티비티 인스턴스를 호출하지 않고 onNewIntent() 메서드를 호출하여 B 액티비티를 재활용한다.
    • 만약 A가 singleTop 이면? : 최상위 스택 액티비티가 B 이기 때문에 A 액티비티 인스턴스는 새로 생성된다. ( standard 와 같다. )

3. singleTask

  • singleTask 모드로 설정된 액티비티는 오직 태스크의 루트에만 존재 할 수 있다.
  • singleTask 로 설정된 액티비티를 호출하게되면 새로운 태스크가 생성되고 singleTask 로 설정된 액티비티에서 다른 액티비티를 호출할 경우 그 액티비티는 새로 생성된 Task 위에 쌓이게 된다.
  • 태스크에 이미 생성되고 singleTask 로 설정된 액티비티가 다시 호출될 경우 onNewIntent() 메서드를 통해 해당 액티비티를 재활용한다.
  • singleTask 모드는 singleTop 모드와 다르게 스택의 최상위 액티비티와 비교하지 않는다.

4. singleInstance

  • singleTask와 동일하게 액티비티 호출시 항상 새로운 태스크가 생성된다.
  • singleTask와 차이점 : singleInstance는 하나의 태스크에 하나의 액티비티만 존재 할 수 있다.

참고자료 ( 출처 )

https://g-y-e-o-m.tistory.com/94
https://m.blog.naver.com/PostView.nhn?blogId=manhdh&logNo=120162763951&proxyReferer=https%3A%2F%2Fwww.google.com%2F

반응형

'Android Developer' 카테고리의 다른 글

[Android] Task 와 Back Stack  (0) 2019.07.15
[Android] Log  (0) 2019.07.10
[Android] 난독화(Proguard)  (0) 2019.05.14
[Android] OpenSource, ButterKnife, Firebase  (0) 2019.05.02
[Andoird] GIF를 이용한 Splash Activity 만들기  (0) 2019.04.12