이전 글에서 설명했던 Intent Flag와 관련된 내용이다.



Activity Affinity


먼저 Activity Affinity라는 개념이 있는데, 액티비티와 태스크를 관리하기 위해 사용한다.


기본적으로 AndroidManifest의 package 명으로 설정되어 있다.


보통 같은 어플리케이션의 액티비티들은 같은 affinity를 가지고 있고 하나의 태스크에서 관리하게 된다.



FLAG_ACTIVITY_NEW_TASK


새 액티비티는 기본적으로 자신을 호출한 액티비티와 같은 태스크에서 관리가 된다.


이 때 FLAG_ACTIVITY_NEW_TASK라는 플래그를 사용하면 새로운 태스크 또는 같은 Affinity를 가지는 태스크로 가게 된다.


만약 FLAG_ACTIVITY_MULTIPLE_TASK 플래그와 함께 사용하면 무조건 새로운 태스크를 생성한다.



예시


앱 A에 액티비티 A1, 앱 B에 액티비티 B1, B2가 존재한다고 하자.


Case 1) 앱 A 실행 후 A1에서 B1 호출


B1은 A1과 같은 태스크에서 관리가 된다.


따라서 B1에서 Back을 하면 A1이 나타난다.


TASK1 : A1 - B1



Case 2) 앱 A 실행 후 A1에서 B1 호출 + FLAG_ACTIVITY_NEW_TASK


B1과 같은 affinity를 가지고 있는 태스크가 현재 존재하지 않기 때문에 태스크를 새로 생성하고 B1은 그 태스크의 Root Activity가 된다.


TASK1 : A1

TASK2 : B1



Case 3) 앱 A, B 실행 후 A1에서 B2 호출 + FLAG_ACTIVITY_NEW_TASK


(이 때 앱 B를 실행하였기 때문에 B1은 TASK3 이라는 태스크에 존재한다)


B2와 같은 Affinity를 가진 태스크가 존재한다.


B2는 B1과 같은 태스크에서 관리되고, B2에서 Back을 했을 때 B1이 보여지게 된다.


TASK1 : A1

TASK3 : B1 - B2



참고


[Android] Activity 생성시에 사용되는 Intent Flag 정리


Activity Affinity, FLAG_ACTIVITY_NEW_TASK

블로그 이미지

NCookie

,