-
[Android] Android Stack 관리 / 확인하기Android 2020. 2. 16. 01:40
안드로이드 앱은 여러 개의 Activity로 관리된다.
오늘은 여러 개의 Activity를 관리/확인 하는 법에 대해 알아보자.
# Activity Stack
여러 Activity 는 Stack 형태로 관리된다.OneActivity에서 TwoActivity를 부르면 위에 쌓이고,
TwoActivity에서 ThreeActivity를 부르면 위에 쌓이고
모두 Stack 형태로 아래와 같이 만들어진다.후입 선출 구조(LIFO)로 가장 나중에 들어온 (top)의 위치한다.
가장 top에 있는 액티비티에서 백버튼을 누르면 top 부터 pop 된다.
# Activity Stack 확인하기
처음 시작되는 Activity를 OneActivity라고 가정해보자.
OneActivity -> TwoActivity -> ThreeActivity를 Call 하는 액티비티 스택을 확인하고 싶다면
안드로이드 스튜디오에서 Tools > Layout Inspector> 실행 시킨 avd or 모바일 기기
선택하면 내가 실행시킨 Activitiy의 stack을 확인할 수 있다.
# Activity Stack 관리하기
Stack 을 관리하는 방법은 크게 2가지가 있다.
1. AndroidManifest의 LaunchMode의 옵션으로 관리
* android:launchMode="standard": 새 인스턴스를 생성하고 여러 번 인스턴스화 될 수 있고, 각 인스턴스는 서로 다른 작업에 속 할 수 있으며,
여러개의 인스턴스가 있을 수 있다. 말이 어렵지만 스택을 보면 이해하기가 쉽다.
ex) OneActivity 가 singleTop 모드로 선언되어있으면OneActivity -> TwoActivity-> ThreeActivity -> ThreeActivity
스택은 아래와 같다. 한마디로 여러 개의 인스턴스가 생성될 수 있다는 뜻이다.
* android:launchMode="singleTop"
: 활동의 인스턴스가 이미 현재 작업의 맨 위에 있으면 시스템은 활동의 새 인스턴스를 생성하지 않고 기존 인스턴스로 라우팅한다.
ex )ThreeActivity=singleTopOneActivity -> TwoActivity->ThreeActivity->
ThreeActivity* android:launchMode="singletask"
: 활동의 인스턴스가 이미 작업에 있다면 시스템은 새 인스턴스를 생성하지 않고 기존 인스턴스로 라우팅 한다.
활동의 인스턴스가 한 번에 하나만 존재 할 수 있다. 루트 액티비티로만 존재한다. 위의 다른 액티비티를 쌓을 수 있다.ex )ThreeActivity=singletask
OneActivity -> TwoActivity->ThreeActivity
스택은 ThreeActivity 하나
* android:launchMode="singleInstance": singletask와 동일하지만 활동은 항상 자체 작업의 단 하나의 유일한 멤버이다. 위의 다른 액티비티를 쌓을 수 없다.
ex ) ThreeActivity=singleInstance
OneActivity -> TwoActivity->ThreeActivity -> OneOneActivity
스택은 ThreeActivity 하나 그리고 마지막에 OneOneActivity
2. Intent Flag로 관리
startActivity()에 전달하는 인텐트 플래그에 아래와 같은 플래그를 주어 스택을 관리한다.
: singleTask와 유사하다. 활동을 새 작업에서 시작한다. 이미 실행 중인 작업이 있다면 그 작업을 마지막으로 포그라운드로 이동한다.
: 새롭게 부른 액티비티가 사장 top에 있는 액티비티면 새 인스턴스가 생성되는 대신 기존 인스턴스가 호출을 수신한다.
signTop과 유사하다.
: 새롭게 부른 액티비티가 현재 stack에서 실행 중이면 활동의 새 인스턴스가 실행되는 대신 해당 액티비티의 스택을 제거하고 새로운 액티비를 가장 top으로 만든다.
REF)
LIST'Android' 카테고리의 다른 글
[Android] Android Context (0) 2020.10.04 [Android] RecyclerView DiffUtil (0) 2020.05.24 [Android]FragmentLifeCycle (0) 2019.07.10 [Android] 키해시 구하기 (0) 2019.07.06 [Android]안드로이드 토글 버튼 만들기. (0) 2019.05.27