Launch Mode
<activity> element 에 lauchmode 속성을 조정하여 activity를 컨트롤 할 수 있습니다. 1. standard 2. singleTop 3. singleTask 4. singleInstance 위의 4가지 모드는 4가지 관점에서 다르게 동작합니다. * 임의 Intent에 대해 어떤 task가 그 activity를 받을 것인가? : standard, singleTop모드는 intent가 발생된 task에 push 됩니다. flag를 FALG_ACTIVITY_NEW_TASK로 설정해도 호출한 동일한 task내에 push 됩니다. affinity & new task에 따라 다른 task가 선택될 수 있습니다. singleTask 및 singleInstance는 task를 정의하여 root activity로 적재되고 다른 task 에 적재되지 않습니다. * 다중 Instance Activity가 가능한가? : standard, singleTop모드는 여러 task에 소속될수도 있고, 한 task에 동일한 activity가 여러 instance가 적재될 수도 있습니다. singleTask, singleInstance는 task내에서 오로지 한개의 instance만 적재됩니다. root activity만 가능하기 때문에 device내에서 한번에 하나의 Instance만 존재할 수 있습니다. * Instance가 task내에서 다른 activity를 가질수 있는가? : singleInstance는 task내에서 오직 하나의 instance만 가능하며, 만일 다른 activity를 시작하면, launchMode에 관계없이 새로운 task가 생성되어 적재됩니다. standard, singleTask, singleTop은 모두 multi instance가 가능합니다. singleTask는 root activity로 생성되며 다른 activity를 task내에 적재가 가능합니다. singleTop과 standard 모드는 stack내에서 자유롭게 다른 activity를 생성가능합니다. * 특정 class의 새로운 instance가 새로운 intent를 다룰 것인가? : standard 모드는 새로운 instance가 새로운 intent의 응답으로 생성됩니다. 각 Instance는 오직 하나의 intent를 다룹니다. singleTop : target-task의 stack에 top activity로 있다면 그 class의 instance가 intent를 재사용하여 처리합니다. top activity가 아니면 재사용하지 않고 새로운 instance가 생성되어 intent를 처리하고 stack에 push됩니다. 예) A - B - C - D 에서 D를 시작하려고 할 때 D가 singleTop이면 A - B - C - D로 됩니다. A - B - C - D 에서 D를 시작하려고 할 때 D가 standard이면 A - B - C - D - D로 됩니다. B가 singleTop이나 standard이면 A - B - C - D - B 가 가능합니다. |
Clearing the stack
기본적으로 사용자가 task를 오랫동안 사용하지 않으면 system은 task의 root activity만 을 제외하고 모든 activity들을 clear한다. <activity> element의 몇가지 속성은 이를 조정 할 수 있게 해줍니다. alwaysRetainState 속성 : task의 root activity에 이 속성을 set하면 이 task는 오랜시간이 지나도 생존하게 됩니다. clearTaskOnLaunch 속성 : task의 root activity에 이 속성을 set하면 task를 나가고 돌아올때 clear 됩니다. finishOnTaskLaunch 속성 : clearTaskOnLaunch와 유사하나 이 속성은 하나의 activity에만 유효합니다. root activity를 포함하여 현재 세션인 경우에만 살아있고 task를 떠나면 clear됩니다. stack에서 activity를 제거하는 다른 방법이 있습니다. intent object의 flag를 FLAG_ACTIVITY_CLEAR_TOP으로 하고 이 intent를 처리할 activity가 target task에 이미 instance를 가지고 있다면, 상위 activity들이 모두 clear되고 그 activity가 top activity가 됩니다. launchMode가 standard라면 stack에서 마찬가지로 삭제되고 새로운 activity가 그 intent 를 처리할 것입니다. FLAG_ACTIVITY_NEW_TASK와 FLAG_ACTIVITY_CLEAR_TOP이 함께 사용되면 존재하 는 activity가 새 task에 생성되어 intent를 처리합니다. |
Starting task
activity는 intent filter중에 action filter로 android.intent.action.MAIN을 그리고 category filter로 android.intent.category.LAUNCHER로 entry point가 설정됩니 다. 이런 설정은 icon과 label 정보를 가지고 화면에 표시하고 task에 적재하고 적재 후 언제 든지 다시 돌아올 수 있도록 해줍니다. 사용자는 언제든 task를 떠날수 있고 다시 돌아올수 있습니다. singleTask와 singleInstance로 설정된 activity는 반드시 MAIN과 LAUNCHER를 filter로 적용해야 합니다. 그렇지 않으면 activity를 수행후 다른 화면으로 갔다가 다시 돌아올 수 있는 방법이 없게 됩니다. FLAG_ACTIVITY_NEW_TASK는 activity하나가 새로운 task에 시작되고 HOME Key를 눌렀을 경우 다시 복귀하기 위해 다른 방법이 있습니다. 외부 task에서 notification manager 같은 entity에서 항상 activity들을 시작할 수 있습니 다. 이런방식으로 외부에서 activity를 invoke할 수 있다면 사용자가 다른 방법으로 그 task를 시작할 수 있음을 유의해야 합니다. 이런 경우 그 activity로 복귀하기를 원하지 않는다면 finishOnTaskLaunch를 사용하면 됩 니다. |
위의 내용은 http://blog.naver.com/free2824?Redirect=Log&logNo=60067211415 에서 참조하였습니다.
'안드로이드' 카테고리의 다른 글
List View 구현시 유의할 점. (0) | 2011.01.26 |
---|---|
화면 회전 (0) | 2011.01.26 |
Affinityes and new Tasks (0) | 2011.01.26 |
Activity & Task (0) | 2011.01.26 |
전화 걸기 (0) | 2011.01.17 |