Task (4) - 새로운 task 생성
새로운 task 생성하기
◼ Manifest
android:launchMode = ["standard" | "singleTop" | "singleTask" | "singleInstance"] |
◼ Intent flag
FLAG_ACTIVITY_SINGLE_TOP |
FLAG_ACTIVITY_NEW_TASK |
FLAG_ACTIVITY_MULTIPLE_TASK |
taskAffinity
새로운 task 생성 시 taskAffinity 는 굉장히 중요하기 때문에 정확히 이해하자.
[Android] - Task (2) - taskAffinity
가령, taskAffinity 설정 없이 "FLAG_ACTIVITY_NEW_TASK" 로 activity 를 활성화 한다면
신규 task 가 생성되지 않고 기존의 task(root activity task) 에 속할 것이다.
(taskAffinity 를 명시하지 않아 디폴드로 앱의 패키지 명이 되었기 때문이다.)
FLAG_ACTIVITY_NEW_TASK
새로운 태스크를 생성하여 그 태스크안에 엑티비티를 추가.
- 동일한 affinity 가 있다면 그 task 에 새 액티비티가 들어간다.
- 동일한 affinity 가 없다면 새로운 task 에 속한다.
FLAG_ACTIVITY_MULTIPLE_TASK 플래그와 함께 사용하면 무조건 태스크가 새로 생성.
[Android] - Task (4.1) - 새로운 task 생성 [FLAG_ACTIVITY_NEW_TASK]
FLAG_ACTIVITY_MULTIPLE_TASK
본 속성은 FLAG_ACTIVITY_NEW_TASK 와 함께 사용하지 않으면 아무런 효과가 없다.
FLAG_ACTIVITY_NEW_TASK 와 함께 사용하면 무조건 새로운 task 를 만들고 그 안에 root activity 가 활성화 된다.
[Android] - Task (4.2) - 새로운 task 생성 [FLAG_ACTIVITY_MULTIPLE_TASK]
FLAG_ACTIVITY_SINGLE_TOP & [launchMode="singleTop"]
대상 task 는 하나의 instance 만 사용한다.
활성화 될 task 의 top 에 같은 activity 가 존재할 경우, 새로운 activity 를 top 으로 올리지 않고 기존의 top 을 재사용.
(launchMode="singleTop" 과 FLAG_ACTIVITY_SINGLE_TOP 은 동일한 기능이다)
[Android] - Task (4.3) - 새로운 task 생성 [FLAG_ACTIVITY_SINGLE_TOP & launchMode="singleTop"]
[launchMode="standard"]
LaunchMode 의 기본값으로 별도의 설정이 없다면 해당 mode 로 동작한다.
별도의 태스크를 생성하지 않고 해당 task 에 계속 추가한다.
매번 새로운 activity instance 를 생성.
[Android] - Task (4.4) - 새로운 task 생성 [launchMode="standard"]
[launchMode="singleTask"]
"singleTask" 로 지정된 activity 는 task 에 해당 activity 가 하나만 존재한다.
◼ 동일한 affinity 가 있는 경우
- 해당 activity 가 존재하는 경우 새로 생성하지 않는다.(onNewIntent() 호출)
- 해당 activity 가 존재하지 않는 경우 새로 생성하여(onCreate() 호출) 가장 위에 추가.
◼ 동일한 affinity 가 없는 경우
- 새로운 task 를 생성해고 해당 activity 는 task 의 root 가 된다.
[Android] - Task (4.5) - 새로운 task 생성 [launchMode="singleTask"]
[launchMode="singleInstance"]
TaskAffinity 와 상관 없이 무조건 새로운 task 생성\
새로 생성된 task 내에서는 "singleInstance" 로 설정된 activity 하나만 존재.
"singleInstance" 로 설정된 activity 가 존재하는 상태에서 활성화 할 경우 기존 activity 를 재사용 한다.
[Android] - Task (4.6) - 새로운 task 생성 [launchMode="singleInstance"]