안녕하세요 돼지왕왕돼지입니다.
오늘 살펴볼 Manifest 관련 attribute 는 taskAffinity 입니다.
이 녀석은 Activity Tag 에 속해 있는 속성인데요,
Activity 들의 Task 관리 측면에서 꼭 알아두어야 할 녀석입니다.
먼저 Affinity 란 단어가 생소하실 텐데, 영어사전을 찾아보면 "친화력", "친밀감" 이라고 정의되어 있네요.
이 affinity 가 어떤 역할을 하는 녀석인지 developer 를 통해 알아볼까요?
- Activity 가 Affinity ( 친밀감 ) 를 가지는 Task 를 지정한다.
- 같은 taskAffinity 값을 가지고 있는 activity 들은 "개념상" 같은 task 에 속한다.
- 기본적으로 한 application 안의 모든 activity 들은 같은 affinity 를 가지고 있다.
- taskAffinity 의 default value 는 <manifest> 에 정의된 packageName 이다.
- taskAffinity 값은 allowTaskReparenting 속성이나 FLAG_ACTIVITY_NEW_TASK 와 상호작용하여 activity 의 task 를 결정한다.
친숙하게 쓰이는 녀석이 아니라, 이해가 안 갈 수 있어 예제를 준비해 보았습니다.
A App. 과 B App. 이 있습니다.
A app. 의 taskAffinity 는 "com.a.app" 이고 B app. 의 taskAffinity 는 "com.b.app" 이라고 가정해봅시다.
A app 에 새로운 activity 를 추가하면서 이놈의 taskAffinity 를 강제로 "com.b.app" 으로 설정을 했습니다.
자 이제 이 새로운 activity 를 A app. 에서 FLAG_ACTIVITY_NEW_TASK flag 와 함께 startActivity() 하면 어떻게 될까요?
정답을 아시겠어요? 먼저 정답을 생각해보시고, 아래를 펼쳐보세요.
요 녀석만 잘 쓰면 task 에 대한 달인의 길에 한 발짝 다가갔다고 볼 수 있겠네요.
테스트 해보면서 이해하도록 노력해보세요~
그럼~
댓글