2023.12.19(화) TIL

quinones·2023년 12월 19일

Task

Task는 안드로이드에서 앱의 활동(Activity)을 관리하는데 사용되는 개념으로, 액티비티의 스택을 관리하는데 도움이 된다. task는 사용자가 앱에서 어떤 활동을 수행하면서 발생하는 다양한 액티비티의 흐름을 추적하고, 뒤로 가기 버튼등을 통해 해당 흐름을 따라갈 수 있도록 도와준다.

Activity는 stack형태인 FirstInLastOut(FILO)형태로 이루어져있다.
이런 Activity Stack을 관리하는방법에는 크게 LaunchMode 옵션과 Intent Flag 이렇게 2가지 종류가 있다.

Intent Flag

크게 3가지로 나뉘어진다.
모두 시나리오를 예로 들어서 정리했다.
-예시 시나리오
1. 액티비티A가 시작되고, 현재 스택에 A만 존재한다.
2. 사용자가 B,C,D액티비티를 차례로 시작하면, 스택은 A-B-C-D로 구성된다.

FLAG_ACTIVITY_SINGLE_TOP

-액티비티를 시작할때, 해당 액티비티가 이미 현재 태스크의 최상위에 있는 경우에는 새로운 인스턴스를 생성하지 않고, 기존의 액티비티를 재사용 하도록 지시하는 플래그이다.

시나리오를 이어서 보면
3. 사용자가 버튼을 클릭하여 다시 A액티비티를 시작하면, SINGLE_TOP을 사용하여 현재 스택에 이미 A가 있음을 확인한다.
4. 따라서 A액티비티를 최상위로 가져오면서 A위에 있는 모든 액티비티를 제거한다.
-> 스택에는 A만 남게된다.

스택에서 해당 액티비티가 이미 최상위에 있으면, 새로운 인스턴스를 생성하지 않고 해당 액티비티를 재사용한다.

FLAG_ACTIVITY_NEW_TASK

-액티비티를 시작할때, 새로운 태스크를 시작하도록 지시하는 플래그이다. 새로운 태스크에 액티비티가 추가되며, 현재 앱의 스택은 그대로 유지된다.

시나리오를 이어서 보면
3. 사용자가 다른앱 또는 액티비티에서 A를 시작하면, NEW_TASK를 사용하여 새로운 태스크를 시작한다.
4. 따라서 새로운 태스크에 A액티비티가 최상위로 시작되면서, 현재 앱의 스택은 그대로 유지된다.
-> 스택에 A-B-C-D 유지하고, 새로운 태스크에 A생성.

새로운 태스크에 속한 A액티비티는 독립적으로 동작하게 된다.

FLAG_ACTIVITY_CLEAR_TOP

-액티비티를 시작할때, 해당 액티비티가 이미 현재 스택에 존재하면 그 위에 있는 모든 액티비티를 제거하고 해당 액티비티를 최상위로 가져오도록 지시하는 플래그이다.

시나리오를 이어서 보면
3. 사용자가 버튼을 클릭하여 다시 A액티비티를 시작하면, CLEAR_TOP을 사용하여 현재 스택에 A가 있음을 확인한다.
4. 따라서 A액티비티를 최상위로 가져오면서 A위에있는 모든 액티비티를 제거한다.
-> 스택에는A만 남게된다.

스택에서 지정된 액티비티가 이미 존재한다면, 그 이외의 액티비티를 제거하고 해당 액티비티를 최상위로 가져온다. 해당 액티비티만 stack에 남는것이다.

clear_top과 single_top차이점 정리.

clear_top -> A액티비티가 이미 스택에 존재한다면 A액티비티를 제외한 다른 액티비티들 종료, 스택에 A액티비티만 남게됨.
single_top -> A액티비티가 이미 스택에 존재하고, 최상단에 존재한다면(가장 마지막에 실행된 액티비티라면)(peek라면) 스택에 추가로 인스턴스를 생성하지 않고 A액티비티를 재사용한다.

AndroidStudio에서 사용법

AndroidManifest의 LaunchMode옵션

5가지의 안드로이드 액티비티 LaunchMode옵션이 있다.

standard

-> 각각의 액티비티 인스턴스가 새로운 태스크에 시작된다. 액티비티를 시작할때마다 항상 새로운 인스턴스가 생성되고, 해당 액티비티가 어떤 태스크에 속하는지 상관하지 않는다.

singleTop

-> 액티비티가 이미 현재태스크의 최상위에 있는경우에는 새로운 인스턴스를 생성하지 않고 기존의 액티비티를 재사용한다.

singleTask

-> 새로운 태스크에 액티비티 인스턴스를 시작하며 해당 액티비티가 이미 다른 태스크에 있으면 그 태스크를 최상위로 가져와서 스택위에 있는 다른 액티비티를 모두 제거해준다.

singleInstance

-> 액티비티가 자신만의 태스크에서 시작되며 그 태스크에는 해당 액티비티만 존재한다. 다른 앱에서 액티비티를 시작하면 새로운 태스크가 생성된다.

AndroidStudio에서 사용법

profile
이우진

0개의 댓글