Android

(Android) - Activity Stack

돗개진 2024. 3. 27. 19:59

[ Process & Task ]

ㄴ> 사용자가 현재 화면으로 보고 있는 액티비티가 가장 위쪽에 위치하며 백(Back)버튼을 누르게 되면 보고 있던 액티비티는 스택에서 제거되고 그 아래에 있는 액티비티가 화면에 나타남

 

Task

: 애플리케이션에서 실행되는 액티비티를 기록하는 스택이며 안드로이드에서 Task를 이용해 화면의 순서와 흐름을 관리할 수 있음

: 스택의 가장 아래에는 기본 액티비티(base activity)가 있으며 주로 홈화면이 이 위치에 놓임

: 어플리케이션의 실행되는 액티비티만을 포함함

 

Process

: 어플리케이션의 독립적인 실행 단위(흐름)을 말함, 태스크는 안드로이드에서 프로세스와 무관하게 실행되는 액티비티 정보를 저장하는 반면 프로세스는 해당 어플리케이션에 존재하는 모든 실행 코드와 객체를 포함함

 

ㄴ> 어플리케이션이 실행되면 프로세스와 태스트가 각각 실행됨, 어플리케이션1이 실행되어 Process#1과 Task를 생성했다고 가정, 어떤 기능을 통해 별도의 어플리케이션2를 실행하게 되면 어플2의 프로세스가 실행되고 그 화면(Acitivity#2)에 대한 정보는 호출했던 어플1의 Task에 저장된다.

 

-> 즉, 액티비티의 인스턴스해당 앱 프로세스의 메모리 영역에 생성됨

 

Activity#2를 열거나 back 버튼을 눌러 액티비티가 전환되면 현재 액티비티에 해당되는 프로세스로 전환됨, 액티비티의 참조가 끝나고 태스크에서 모두 제거될 경우 프로세스도 종료됨

 

-> 어플2의 액티비티인 Activity#2의 참조가 끝나고 태스크에서 모두 제거될 경우 Process#2도 종료됨

 


 

[ Activity Stack ]

: 액티비티를 여러 개 호출 시 스택이 쌓임 -> 스택에서 맨 위에 있는 액티비티가 화면에 보임

: 런치모드는 AndroidManifest.xml에서 설정 (하지만 되도록이면 건들지 않는 것이 좋음)

 

 

1. Standard (기본 설정값)

: 후입선출 (LIFO, Last In First Out) / 호출하는 모든 액티비티가 위에 쌓임

ㄴ> 기본적으로 설정되어 있는 모드로 액티비티가 호출될 때마다 태스크에 저장하기 때문에 여러 액티비티가 중첩되어 저장될 수 있음

 

 

 

2. SingleTop

- 가장 위(Top)의 액티비티는 중복해서 쌓이지 않음 / 가장 위의 액티비티가 아니라면 중복 가능

ㄴ> 가장 위(Top)의 액티비티는 중복되어 쌓이지 않으며 top 영역에 Three Activity를 다시 Call 하면 기존 Activity를 재활용하여 호출함 ( onNewIntent() 호출 )

 

 

3. SingleTask

- 쌓인 스택은 유지 -> 새로운 스택 생성 -> 새로운 스택에 다른 액티비티 스택 쌓음

ㄴ> 다중 인스턴스 생성이 불가능하며 쌓인 스택은 남고 새로운 스택 공간이 하나 더 생성됨, 새로 생긴 스택 공간은 다른 액티비티 스택에 쌓임 (Three 액티비티 스택 영역에 one, two 액티비티 스택이 쌓임)  / 유저의 입장에선 스탠다드와 같음

 

 

4. SingleInstance

- 쌓인 스택 유지 -> 새로운 스택 공간 생성 -> 새로 생긴 공간에는 다른 액티비티 스택 X -> 다른 액티비티 호출 시 기존 스택에 쌓임

ㄴ> 쌓인 스택은 남고 새로운 스택 공간이 하나 더 생김 / One, Two 스택이 쌓인 공간에서 Three 액티비티를 Call 한다면 태스크 영역에 Three 영역이 존재하며 한 태스크에는 하나의 SingleInstance 액티비티만 존재 가능

 


 

 

ㄴ> 좀 더 이해하기 쉬운 Acitivity Stack 시각 자료

 

ㄴ> 스택의 종류 4가지 중 실제로 많이 쓰이는 3가지에 대한 더 자세한 설명