ReStudy 2. 액티비티와 태스크
- 2013. 12. 12 ---------------- 작성 시작, 1 작성
안드로이드는 두 개의 액티비티를 같은 태스크내에 유지함으로써 사용자 경험을 유지시킨다. 태스크는 하나의 "애플리케이션"처럼 사용자들이 경험하는 그 무엇이며 하나의 스택 내에 정렬된 관련 액티비티들의 그룹니다. 스택의 루트 액티비티는 그 태스크를 시작했던 액티비티이고 최상위 액티비티는 현재 실행중인 액티비티이다.
액티비티와 태스크 간의 결합과 태스크 내에서의 액티비티의 동작방식은 매니페스트 내의 액티비티 <activity> 엘리먼트에 설정된 애트리뷰트와 액티비티를 시작시켰던 인텐트 오브젝트 내에 설정된 플래그 간의 상호작용에 의해 제어된다.
[주요 인텐트 플래그]
- FLAG_ACTIVITY_NEW_TASK
- FLAG_ACTIVITY_CLEAR_TOP
- FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
- FLAG_ACTIVITY_SINGLE_TOP
[주요 <activity> 애트리뷰트]
- taskAffinity
- launchMode
- allowTaskReparenting
- clearTaskOnLaunch
- alwaysRetainTaskState
- finishOnTaskLaunch
디폴트로 애클리케이션 내의 모든 액티비티는 서로에 대해 하나의 어피니티를 갖는다. 하지만 각가의 액티비티에 대한 개별적인 어피니티가 <activity> 엘리먼트의 taskAffinity 애트리뷰트를 통해 설정될 수 있다. 어피니티는 액티비티를 런치하는 인텐트 오브젝트가 FLAG_ACTIVITY_NEW_TASK플래그를 포함하고 있거나 액티비티에 allowTaskReparenting 애트리뷰트 값이 "true"로 설정되어 있을 때이다.
- FLAG_ACTIVITY_NEW_TASK 플래그
- allowTaskReparenting 애트리뷰트