[안드로이드] 어피니티(Affinity) 와 태스크
- 프로그래밍 정보
- 2010. 8. 16.
반응형
이전글 액티비티와 태스크에 이은 어피니티와 태스크에 관한 글입니다.
[안드로이드] - [안드로이드] 액티비티와 태스크
읽기전에 손가락 한번 클릭~ >_<
고마워요 ~ Chu ~ ♥
어피니티와 태스크
어플리케이션의 모든 액티비티는 디폴트로 서로에 대해 하나의 어피니티(affinity : 친화력) 를 갖습니다. 즉, 동일 태스크에 속하는 모두에 대해 하나의 설정이 존재한다고 할 수 있겠네요.
하지만 각각의 액티비티에 대한 개별 어피니티가 <activity> 엘리먼트의 taskAffinity 속성을 통해 설정될 수 있는데요.
다른 어플리케이션 내에 정의된 액티비티들이 하나의 어피니티를 공유할 수도 있고, 같은 어플리케이션 내에 정의된 액티비티들에게 다른 어퍼니티가 지정될 수도 있겠습니다.
어피니티는 두가지 조건 하에서 동작하는데요, 액티비티를 실행하는 인텐트 객체가 FLAG_ACTIVITY_NEW_TASK 플래그를 포함하고, 액티비티에 allowTaskReparenting 속성값이 "true" 일때입니다.
FLAG_ACTIVITY_NEW_TASK 플래그
새로운 액티비티는 디폴트로 startActivity() 를 호출한 액티비티의 태스크 안에서 실행됩니다. 액티비티는 스택에 푸시되죠. 만일, 인텐트 객체에 FLAG_ACTIVITY_NEW_TASK 플래그가 포함되어 startActivity() 로 전달되었다면 시스템은 새로운 액티비티를 실행하기 위한 다른 태스크를 찾습니다.
여기에서 태스크들의 대부분은 신규태스크가 되겠습니다 ( NEW_TASK 니까요 ~ ㅎ )
하지만 꼭 그래야만 하는것은 아니며 신규 액티비티와 동일한 어피니티를 갖는 태스크가 이미 존재한다면, 그 액티비티는 그 태스크 내에서 실행됩니다.
그렇지 않다면 신규태스크를 실행하고요.
allowTaskReparenting 속성
액티비티의 allowTaskReparenting 속성이 "true" 로 설정되어 있다면, 액티비티는 시작된 태스크로부터 어피니티를 갖는 태스크로 이동이 가능해 집니다. ( 단, 어피니티를 갖는 태스크가 포그라운드로 오게 될때만 이동할 수 있습니다 )
예를들어 "A" 라는 액티비티가 있습니다. 그것은 동일한 어플리케이션 내의 다른 액티비티들과 같은 어피니티(디폴트)를 가지고 있고, 리페어런팅(부모 태스크의 변경여부를 뜻합니다) 이 허용되어 있습니다.
만일 다른 액티비티들 중 하나가 "A" 라는 액티비티를 시작하면 처음에는 같은 태스크에 속해 있다가 나중에 어피니티를 갖는 태스크가 실행되면 "A" 액티비티는 다른 태스크에 재 지정되고 그 태스크에서 보여지게 될 것입니다.
만약 .apk 파일이 사용자 관점에서 하나 이상의 어플리케이션을 포함하고 있다면 그것들 각각과 연관된 액티비티들에 대해 다른 어피니티를 지정할 수 있겠습니다.
관련글
[안드로이드] 액티비티와 태스크
[안드로이드] 인텐트 필터
[안드로이드] 안드로이드 매니페스트 파일
[안드로이드] 컴포넌트 종료하기
[안드로이드] 컴포넌트 활성화 - 인텐트(Intent)
반응형