-
ReStudy 2. 액티비티와 태스크backup/android 2013. 12. 12. 00:35
- 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
1. 어피니티(Affinity, 친화력)와 신규 태스트디폴트로 애클리케이션 내의 모든 액티비티는 서로에 대해 하나의 어피니티를 갖는다. 하지만 각가의 액티비티에 대한 개별적인 어피니티가 <activity> 엘리먼트의 taskAffinity 애트리뷰트를 통해 설정될 수 있다. 어피니티는 액티비티를 런치하는 인텐트 오브젝트가 FLAG_ACTIVITY_NEW_TASK플래그를 포함하고 있거나 액티비티에 allowTaskReparenting 애트리뷰트 값이 "true"로 설정되어 있을 때이다.
- FLAG_ACTIVITY_NEW_TASK 플래그
새로운 액티비티는 디폴트로 호출자와 같은 스택에 푸쉬 된다. 하지만 FLAG_ACTIVITY_NEW_TASK 플래그가 포함되어 전달되면 시스템은 다른 태스크를 찾는다. 새로운 태스크이거나, 동일 어피니티를 가지는 태스크가 존재한다면 그 태스크 내에서 런치된다.- allowTaskReparenting 애트리뷰트
true로 설정되면 액티비티는 어피니티를 갖는 태스크가 앞으로 오게 될 때 시작된 태스크로부터 어피니티를 갖는 태스크로 이동할 수 있다. 예를 들어선택해 놓은 도시의 날씨 상황을 예보하는 어떤 여행 애플리케이션의 일부를 정의하는 액티비티가 있다고 가정하자. 그것은 동일 애플리케이션 내의 다른 액티비티들과 같은 어피니티(디폴트 어피니티)를 가지고 있고, 리페어런팅(부모 태스크를 변경)이 허용되고 있다. 만약 새 애플리케이션의 액티비티가 일기 예보 액티비티를 시작하면, 그것은 새 애플리케이션의 액티비티와 같은 태스크에 속한다. 하지만 나중에 여행 애플리케이션이 앞으로 오게 되면 그 일기 예보 액티비티는 다른 태스크에 재지정 되고 그 태스크에서 보여지게 된다.만일 .apk 파일이 사용자 관점에서 하나 이상의 "애플리케이션"을 포함하고 있다면, 그것들 각각과 연관된 액티비티들에 대해 다른 어피니티를 지정하고자 할 것이다.