View
오늘 알아볼것!
금일 알아 볼 것은 Task에 대한 것이다.
원래 Intent에 대해서 알아볼 때 포스트하려고 했는데 조금 빠르게 포스트하게 되었다.
Task란? 무엇인가?
Task는 어플리케이션에서 실행되는 Activity를 보관하고 관리는 Stack 형태의 연속된 Activity로 이루어진 것을 말한다.
즉 간단히 말해서 Activity를 순서대로 쌓아 올린 탑 같은 걔념이다.
특징
- 선입후출(FILO)의 형태로 나중에 쌓인 액티비티일수록 가장 먼저 사용된다.
- 서로 다른 어플리케이션 간의 이동에도 Task를 이용해 사용자 경험를 유지시켜 준다.
- 최조적재 액티비티는 Root Activity라고 하며, 어플리케이션 런처로부터 시작된다.
- 마지막으로 적재되는 Activity는 Top Activity라고 하며 현재 화면에 활성화되어 있는 액티비티를 말한다.
- Task 내에는 서로 다른 어플리케이션의 액티비티들이 포함될 수 있어 어플리케이션에 경계없이 하나의 어플리케이션인 것처럼 보이게 해준다.
- Task의 Stack내에 존재하는 액티비티들은 모두 묶여서 background와 foreground로 함께 이동한다.
- Flag를 사용하여 Task내 Activity의 흐름을 제어할 수 있다.
안드로이드 시스템은 보통 자동으로 태스크를 관리해준다. 하지만 LanuchMode라는 것을 통해서 관리 방식을 설정할 수 있다.
그리고 이 LaunchMode는 AndroidMainfest.xml이나 intent의 flag를 통해서 설정할 수 있다.
LaunchMode
Launchmode에는 총 4가지가 존재한다. standard, singleTop, singleTask, singleInstance가 존재하며, 크게 2가지로 분류할 수 있다.
standard와 singleTop은 액티비티가 여러번 인스턴스화 될 수 있고, 태스크에 어떤 곳에도 존재할 수 있다.
singleTask와 singleInstance는 단일 인스턴스를 유지하면서 항상 태스크의 루트에 있다.
간단히 각각의 모든에 대해서 설명하겟다 자세한건.. 나중에 다시 Intent를 다룰 때..
standard(기본 설정)
- 기본적으로 설정되어 있는 모드
- 시스템이 항상 대상 작업에 새 액티비티 인스턴스를 생성하고 Intent를 해당 인스턴스로 라우티한다.
- singletop*
- 액티비티 인스턴스가 이미 대상 작업의 맨 위에 존재하는 경우 시스템은 새 액티비티 인스턴스를 생성하는 대신 onNewIntent() 메서를 호출하여 intent를 해당 인스턴스로 라우팅한다.
- singleTask*
- 시스템이 새 작업의 루트에 액티비티를 생성하고 인텐트를 해당 액티비티로 라우팅한다.
- 만약에 액티비티 인스턴스가 이미 존재할 경우 새 인스턴스를 생성하는 대신 onNewIntent() 메서를 호출하여 intent를 기존 인스턴스로 라우팅한다.
- singleInstance*
- singleTask와 동일하게 새로운 태스크를 생성한다. 대신 singleTask와 다르게 해당 Task에서 다른 액티비티를 허용하지 않는다.(즉 다른 액티비티 호출 불가)
IntentFlag
intent에 Flag를 설정해서 Task 관리 방식을 설정할 수 있다. (만약에 매니페스트와 동시에 설정시 Flag가 더 우선순위가 높다.)
FLAG_ACTIVITY_NEW_TASK
- 새로운 태스크를 생성해서 저장한다.(singleTask와 동일)
- FLAG_ACTIVITY_MULTIPLE_TASK*
- 위의 FLAG_ACTIVITY_NEW_TASK와 같이 사용되며, 같이 사용할 경우 호출하는 액티비티는 무조건 새로운 태스크의 루트 액티비티로 생성된다.
FLAG_ACTIVITY_SINGLE_TOP
- 태스크 가장 위쪽의 액티비티일 경우 재활용한다.(singleTop과 동일)
FLAG_ACTIVITY_CLEAR_TOP
- 액티비티가 태스크에 존재한다면, 그 액티비티 위쪽에 존재하는 모든 액티비티를 제거하고 해당 액티비티를 활성화한다.
FLAG_ACTIVITY_NO_HISTORY
- 액티비티가 스택에 존재하지 않도록 한다
'TIL > 스터디' 카테고리의 다른 글
Calendar 클래스 (0) | 2024.02.29 |
---|---|
hilt가 무엇인디? (3) | 2024.02.27 |
Subject 클래스(PublishSubject, ReplaySubject) (0) | 2024.02.22 |
Subject 클래스(AsyncSubject, BehaviorSubject) (0) | 2024.02.21 |
Hot Observable vs Cold Observable (2) | 2024.02.20 |