프로그래밍/Android 2011.05.30 17:48
액티비티가 어떻게 런치되어야 하는 지에 대한 명령. 인텐트를 처리하기 위해 액티비티가 호출될 때 무엇이 발생해야 하는 지를 결정하기 위해, 인텐트 오브젝트의 액티비티 플래그(FLAG_ACTIVITY_* 상수)와 함께 동작하는 네 가지 모드가 있다. 그것은 다음과 같다.

"standard" "singleTop" "singleTask" "singleInstance"

디폴트의 모드는 “standard”이다
 

그 모드들은 두 가지 주요 그룹으로 나뉘어 진다. 한쪽에는 “standard” 와 “singleTop” 액티비티들이 있으며, 다른 한쪽에는 “singleTask” 와 “singleInstance”가 있다. “standard” 또는 “singleTop” 런치 모드를 가지는 액티비티는 여러 번 인스턴스화 될 수 있다. 인스턴스는 어떤 태스크에도 속할 수 있으며, 그리고 액티비티 스택의 어느 곳에든 놓여질 수 있다.
일반적으로 그것들은 startActivity()를 호출한 태스크에서 런치된다(인텐트 오브젝트가 FLAG_ACTIVITY_NEW_TASK 명령을 포함하지 않는 한 그러하며, 이 경우에는 다른 태스크가 선택되어 진다 - taskAffinity 애트리뷰트를 보라).
 

그에 반하여, “singleTask” 와 “singleInstance” 액티비티들은 오직 하나의 태스크를 시작할 수 있다. 그것들은 항상 액티비티 스택의 루트에 위치한다. 더욱이, 디바이스는 한 번에 ? 오직 하나의 그 태스크에서 오직 하나의 액티비티 인스턴스를 보유할 수 있다.
 

“standard” 와 “singleTop” 모드는 단지 한 측면에서만 서로 차이가 있다: “standard” 액티비티를 위한 신규 인텐트가 있을 때마다, 신규 클래스 인스턴스가 그 인텐트에 응답하기 위해 생성된다. 각각의 인스턴스는 하나의 인텐트를 처리한다. 비슷하게 “singleTop” 액티비티에 대한 신규 인스턴스 또한 신규 인텐트를 처리하기 위해 생성될 수 있다. 하지만 타겟 태스크가 이미 그것의 스택의 최상위에 그 액티비티에 대한 인스턴스를 가지고 있다면, 그 인스턴스가 신규 인텐트를 수신할 것이다(onNewIntent() 호출에서); 신규 인스턴스는 생성되지 않는다. 다른 상황에서는 - 예를 들어 만약 “singleTop” 액티비티에 대한 이미 존재하는 인스턴스가 타겟 태스크에 있으나 그것이 스택의 최상위에 있지 않다면, 또는 그것이 스택의 최상위에 있으나 타겟 태스크에는 있지 않다면 ? 신규 인스턴스는 생성될 것이고 스택에 푸쉬된다.

“singleTask” 와 “singleInstance” 모드들 또한 오직 한 측면에서만 서로 차이가 있다: “singleTask” 액티비티는 다른 액티비티가 그것의 태스크의 일부가 되는 것을 허용한다. 그것은 액티비티 스택의 루트에 있으나, 다른 액티비티들(반드시 “standard” 와 “singleTop” 액티비티)은 같은 태스크에서 런치될 수 있다. 반면에, “singleInstance” 액티비티는 어떤 액티비티도 그것의 태스크의 일부가 되는 것을 허용하지 않는다. 그것은 태스크 안에 있는 유일한 액티비티이다. 만약 그것이 다른 액티비티를 시작한다면, 그 액티비티는 다른 태스크에 할당된다 ? 마치 FLAG_ACTIVITY_NEW_TASK가 인텐트에 있었던 것처럼.

런치 모드와 인텐트 플래그를 사용한 그것들의 상호작용에 대한 더 많은 정보는, 2장. “애플리케이션 기초”의 “액티비티와 태스크”를 보라.


http://developer.android.com/guide/topics/manifest/activity-element.html

<activity android:allowTaskReparenting=["true" | "false"]
         
android:alwaysRetainTaskState=["true" | "false"]
         
android:clearTaskOnLaunch=["true" | "false"]
         
android:configChanges=["mcc", "mnc", "locale",
                                 
"touchscreen", "keyboard", "keyboardHidden",
                                 
"navigation", "orientation", "screenLayout",
                                 
"fontScale", "uiMode"]
         
android:enabled=["true" | "false"]
         
android:excludeFromRecents=["true" | "false"]
         
android:exported=["true" | "false"]
         
android:finishOnTaskLaunch=["true" | "false"]
         
android:hardwareAccelerated=["true" | "false"]
         
android:icon="drawable resource"
         
android:label="string resource"
         
android:launchMode=["multiple" | "singleTop" |
                             
"singleTask" | "singleInstance"]
         
android:multiprocess=["true" | "false"]
         
android:name="string"
         
android:noHistory=["true" | "false"]  
         
android:permission="string"
         
android:process="string"
         
android:screenOrientation=["unspecified" | "user" | "behind" |
                                     
"landscape" | "portrait" |
                                     
"sensor" | "nosensor"]
         
android:stateNotNeeded=["true" | "false"]
         
android:taskAffinity="string"
         
android:theme="resource or theme"
         
android:windowSoftInputMode=["stateUnspecified",
                                       
"stateUnchanged", "stateHidden",
                                       
"stateAlwaysHidden", "stateVisible",
                                       
"stateAlwaysVisible", "adjustUnspecified",
                                       
"adjustResize", "adjustPan"] >  
    . . .
</activity>  


'프로그래밍 > Android' 카테고리의 다른 글

Location  (0) 2011.06.07
카메라  (0) 2011.06.07
Android <Activity - android:launchMode>  (0) 2011.05.30
Android Intent flag  (0) 2011.05.30
Android 애니메이션  (0) 2011.05.30
Android 화면 고정  (0) 2011.05.30
posted by zerowns

티스토리 툴바