** 개인적 메모입니다. 태클 사절 **
Task or Stack 의 기본
Launcher 에서 Shortcut 을 클릭하거나, All-apps에서 icon을 클릭하면,
기존에 task 가 있었을 경우에는 그 task가 불려지고, 아니면 새로 task 를 만든다. ( default flag )
FLAG_ACTIVITY_NEW_TASK
기 존재하는 instance가 없을 때 새로운 task 를 만들면서 launch 시킨다.
단, 기존에 존재하는 task 중에 같은 affinity를 가지고 있다면 그곳으로 새 액티비티가 되어 들어간다.
FLAG_ACTIVITY_MULTIPLE_TASK 와 함께 쓰일 경우는 다른 조건 보지 않고, 무조건 새로운 task 에 생성
기 task 중 새로 시작하는 activity가 존재하는 경우는 새로 activity를 띄우지 않고, foreground로만 땡겨옴.
& onNewIntent() 로 intent 가 들어간다. ( singleTask 와 같은 효과, 이때 allowTaskReparenting = false겠지.. )
allowTaskReparenting = true 이면 해당 task 에 붙일 것으로 생각.. result를 요구하는 startActivityForResult 를 실행시킬 때는 줘서는 안된다.
참고: android:allowTaskReparenting.
= true affinity 가 같은 task 로 이동할 수 있다.
= false launch 시킨 task 에만 한정된다. ( * default )
이 속성은 상속됨.
이놈은 standard와 singleTop 에 국한된다. ( singleTask 도 해당될 것으로 보이긴 하다... 음..?
android:taskAffinity
= affinity 값. ( default 는 package name )
-FLAG_ACTIVITY_MULTIPLE_TASK
FLAG_ACTIVITY_NEW_TASK 와 함께 쓰여서,( must ) 기 존재하는 task를 foreground로 가져오는 것을 방지한다. new activity 는 항상 새로운 task 생성과 함께 root 로 들어간다.
-FLAG_ACTIVITY_BROUGHT_TO_FRONT
launchMode = "singleTask"일 때 system 에서 자동으로 설정해주는 flag. ( 보통 application이 설정하지 않는다. )
-FLAG_ACTIVITY_CLEAR_TASK
반드시 FLAG_ACTIVITY_NEW_TASK 와 함께 사용되며, 새로운 task 를 생성하며 root 가 된다.
추가적으로 기존 어떤 task 에서 해당 activity가 있다면 그 task를 clear 한다
- FLAG_ACTIVITY_CLEAR_TOP
해당 Task 에 이미 activity 가 존재한다면, 그 위에 쌓인 activity 들을 모두 destroy 시키고,
intent 는 onNewIntent() 로 전달된다.
( launch mode 가 single 이거나, FLAG_ACTIVITY_SINGLE_TOP 일 경우에 )
launch mode 가 "multiple" 이면서 FLAG_ACTIVITY_SINGLE_TOP 아닐 경우에는 finish -> recreate.
출처:
http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/
FLAG_ACTIVITY_NEW_TASK 와 conjunction 되면 기존에 존재하는 activity 가 foreground로 나오며,
root state 로 만든다.
'Program > Android' 카테고리의 다른 글
Android - Activity Life Cycle (0) | 2011.12.05 |
---|---|
Android - WebView & JavaScript (1) | 2011.11.14 |
굴욕...BaseLayout Custom (6) | 2011.10.29 |
동적 뷰 추가하기 (2) | 2011.10.29 |
LayoutInflater (1) | 2011.10.29 |