Android

[개념 정리] Activity Stack

정생강 2024. 4. 1. 10:00

 

Task and the back stack

 

작업은 사용자가 어떤 작업을 하려 할 때 상호작용하는 활동의 모음이다. 이러한 활동은 백스택이라는 스택에 각 활동이 열리슨 순서로 적용된다.

 

 

 

작업의 수명 주기 및 작업의 백 스택

 

기기의 메인 화면이 대다수 작업의 시작 지점이다. 사용자가 앱 런처나 홈 화면에서 앱 또는 바로가기 아이콘을 터치하면 앱의 작업이 포그라운드로 전환된다. 앱에 관한 작업이 없으면 새 적업이 생성되고 앱의 기본 활동이 스택 루트 활동으로 열린다.

 

현재 활동이 다른 활동을 시작하면 새 활동이 스택 맨 위에 푸시되고 포커스를 갖는다. 이전 활동은 스택에 남아 있지만 중지된다. 활동이 중지되면 시스템은 활동의 사용자 인터페이스의 현재 상태를 유지한다. 사용자가 뒤로 작업을 실행하면 현재 활동이 스택 맨 위에 팝되고 소멸한다. 이전 활동이 재개되며 UI의 이전 상태가 복원된다.

 

스택의 활동은 다시 정렬되지 않으며 현재 활동에서 시작되고 사용자가 뒤로 버튼이나 동작을 통해 닫을 때만 스택에 푸시되고 스택에서 팝된다. 따라서 백 스택은 후입선출 객체 구조로 작동한다. 

 

 

 

 

백그라운드 및 포그라운드 작업

 

작업은 사용자가 새 작업을 시작하거나 홈 화면으로 이동할 때 백그라운드로 이동할 수 있는 응집 단위이다. 작업의 모든 활동은 백그라운드에 있는 동안 중지되지만 작업의 백 스택은 그대로 유지된다.

 

 

작업 B가 포그라운드에서 사용자 상호 작용을 수신하는 동안 작업 A는 백그라운드에서 재개를 기다리고 있다.

 

 

 다중 활동 인스턴스

 

백 스택의 활동은 결코 재정렬되지 않으므로, 앱에서 사용자가 두 개 이상의 활동에서 툭정 활동을 시작할 수 있도록 허용하는 경우 활동의 이전 인스턴스를 맨 위로 가져오는 것이 아니라 새 인스턴스가 생성되어 스택으로 푸시된다. 따라서 앱의 한 활동은 아래 그림과 같이 다른 작업에서도 여러번 인스턴스화 될 수 있다. 사용자가 뒤로 버튼이나 동작을 사용하여 뒤로 이동하면 활동 인스턴스는 열린 순서대로 표시되며, 각 인스턴스는 고유한 UI상태를 갖는다. 따라서 활동이 두 번 이상 인스턴스화 되지 않으려면 이 동작을 수정해야 한다.

 

 

 

 

매니페스트 파일을 사용하여 시작 모드 정의

 

매니페스트 파일에서 활동을 선언할 때 <activity> 요소의 launchMode 속성을 사용하여 활동이 작업과 연결되는 방식을 지정할 수 있다.

 

1. standard

기본 모드. 시스템은 활동이 시작된 작업에 활동의 새 인스턴스를 만들고 인텐트를 인스턴스로 라우팅한다. 활동은 여러 번 인스턴스화 될 수 있고 각 인스턴스는 서로 다른 작업에 속할 수 있으며 한 작업에는 여러 인스턴스가 있을 수 있다.

 

2. singleTop

활동 인스턴스가 이미 현재 작업의 맨 위에 있으면 시스템은 활동의 새 인스턴스를 생성하는 대신 onNewIntent() 메서드를 호출해 인텐트를 이 인스턴스로 라우팅한다. 활동은 여러 번 인스턴스화 되고 각 인스턴스는 서로 다른 작업에 속할 수 있으며 한 작업에는 여러 인스턴스가 있을 수 있다.

 

3. singleTask

시스템이 새 작업의 루트에서 활동을 만들거나 어피니티가 동일한 기존 작업에서 활동을 찾는다. 활동의 인스턴스가 이미 존재하는 경우 시스템은 새 인스턴스를 만드는 대신 onNewIntent() 메서드를 호출하여 인텐트를 기존 인스턴스로 라우팅한다. 한편 그 위에 있는 다른 모든 활동은 소멸된다.

 

4. singleInstance

동작은 "singleTask"와 동일하지만 시스템이 인스턴스를 보유한 작업으로는 다른 활동을 실행하지 않는다는 점이 다르다. 활동은 항상 작업의 유일한 단일 멤버이다. 이 항목으로 시작된 모든 활동은 별도의 작업에서 열린다.

 

5. singleInstancePerTask

활동은 작업의 루트 활동, 즉 작업을 만든 첫 번째 활동으로만 실행할 수 있다. 따라서 한 작업에는 이 활동의 인스턴스가 하나만 있을 수 있다. singleTask 시작 모드와 달리 이 활동은FLAG_ACTIVITY_MULTIPLE_TASK 또는 FLAG_ACTIVITY_NEW_DOCUMENT 플래그가 설정되어 있으면 서로 다른 작업의 여러 인스턴스에서 시작할 수 있다.

 

시작 모드가 singleTask 인 활동이 백 스택에 추가되는 방식

 

'Android' 카테고리의 다른 글

[개념 정리] Fragment 데이터 전달 방식  (0) 2024.04.01
[개념 정리] Fragment LifeCycle  (0) 2024.04.01
[개념 정리] Activity LifeCycle  (0) 2024.04.01