기본적으로 하나의 application의 activity들은 각기 하나의 affinity 를 갖습니다. 그러나 각각의 affinity들은 <activity> element의 taskAffinity속성으로 affinity set을 이룰수 있습니다.
서로 다른 Application의 Activity들이 동일한 affinity를 공유할 수 있으며 한 application의 Activity들이 서로 다른 affinity를 가질수 있습니다.
affinity는 Intent object에 FLAG_ACTIVITY_NEW_TASK로 Activity를 적재할 때와 Activity가 allowTaskReparenting 속성을 true로 set 하였을 때 시작됩니다.
FLAG_ACTIVITY_NEW_TASK 적용시
기본적으로 Activity는 startActivyt()로 task안에 적재 됩니다. caller[호출한 Task]와 동일한 stack에 push 됩니다. 그러나 startActivyt()가 FLAG_ACTIVITY_NEW_TASK 로 flag를 set하여 호출하면, 시스템은 새로운 Activity를 담기위한 task를 찾습니다. 보통 새로운 task가 생성되지만, 동일한 affinity를 갖는 task가 검색되면 그 task에 가서 달라 붙습니다. |
allowTaskReparenting 적용시
특정 Activity가 allowTaskReparenting 속성이 "true"이면, 시작된 task에서 동일한 affinity를 갖는 다른 task가 foreground로 올라올때 그 task로 activity가 이동될 수 있습니 다. 예를 들면, 특정도시의 날씨를 보여주는 Activity를 가지고 있는 travel application이 있다 고 가정을 합니다. travel application에 동일한 affinity를 갖는 다른 activity가 있고 repaarenting이 가능합니다. 이 상태에서 당신의 application의 activity가 travel application의 날씨 activity를 시작하면, 날씨 activity는 당신의 task에 적재되게 됩니다. 그러나 이 때 travel application이 적재되게 되면 날씨 activity는 새로 시작된 travel application의 task에 재위치지정이 되고 화면에 표시되어 집니다. travel application : weather activity, ... -> allowTaskReparenting이 true이고 모두 동일 affinity를 갖습니다. your application : A, B, C, D Activity launch travel application -> (1)start Weather activity -> HOME -> launch your application -> start Activity -> (2)start Weather activity -> HOME -> (3)travel application -> display Weather activity (1) 시점에서 weather activity는 task1(travel app의 task)에 적재됩니다. (2) 시점에서 weather activity는 task2(your app의 task)에 적재 됩니다. (3) 시점에서 travel app이 다시 시작될때 task2에 있던 weather activity가 task1으로 재지정 됩니다. 하나의 패키지(*.apk)에 여러 application이 정의되어 있다면, app단위로 각기 다른 affinity를 부여하는 것이 좋습니다. |
위의 내용은 http://blog.naver.com/free2824?Redirect=Log&logNo=60067211415 에서 참조
하였습니다.
'안드로이드' 카테고리의 다른 글
화면 회전 (0) | 2011.01.26 |
---|---|
Task (0) | 2011.01.26 |
Activity & Task (0) | 2011.01.26 |
전화 걸기 (0) | 2011.01.17 |
Telephony Manager (0) | 2011.01.17 |