티스토리 뷰

Android/Task

Task (4) - 새로운 task 생성

parkho79 2019. 3. 27. 09:44
728x90



새로운 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"]



728x90
댓글