Skip to content

Most visited

Recently visited

navigation

<activity>

구문:
<activity android:allowEmbedded=["true" | "false"]
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]
          android:banner="drawable resource"
          android:clearTaskOnLaunch=["true" | "false"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale",
                                 "uiMode", "orientation", "screenSize",
                                 "smallestScreenSize"]
          android:documentLaunchMode=["intoExisting" | "always" |
                                  "none" | "never"]
          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=["standard" | "singleTop" |
                              "singleTask" | "singleInstance"]
          android:maxRecents="integer"
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:permission="string"
          android:process="string"
          android:relinquishTaskIdentity=["true" | "false"]
          android:resizeableActivity=["true" | "false"]
          android:screenOrientation=["unspecified" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "userLandscape" | "userPortrait" |
                                     "sensor" | "fullSensor" | "nosensor" |
                                     "user" | "fullUser" | "locked"]
          android:stateNotNeeded=["true" | "false"]
          android:supportsPictureInPicture=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    . . .
</activity>
포함된 위치:
<application>
포함 가능한 항목:
<intent-filter>
<meta-data>
설명:
애플리케이션의 시각적 사용자 인터페이스 요소를 구현하는 액티비티(Activity 서브클래스)를 선언합니다. 모든 액티비티는 매니페스트 파일의 <activity> 요소가 나타내야 합니다. 거기에 선언되지 않은 액티비티는 시스템이 표시하지 않으며 실행되지 않습니다.
특성:
android:allowEmbedded
액티비티가 다른 액티비티의 포함된 하위 항목으로 시작할 수 있음을 나타냅니다. 특히 하위 항목이 다른 액티비티가 소유하는 Display와 같은 컨테이너에 상주하는 경우에 그러합니다. 예를 들어, Wear 사용자 지정 알림용으로 사용되는 액티비티는 Wear가 다른 프로세스에 있는 컨텍스트 스트림에 액티비티를 표시할 수 있도록 이 특성을 선언해야 합니다.

이 특성의 기본값은 false입니다.

android:allowTaskReparenting
액티비티를 시작한 작업에서 해당 작업이 다음에 앞으로 나올 때 액티비티가 선호하는 그 다음 작업으로 이동할 수 있는지 여부를 나타내는데, 이 값이 "true"인 경우 이동 가능하고 "false"인 경우 시작한 작업에 그대로 머물러 있어야 합니다.

이 특성을 설정하지 않는 경우 <application> 요소의 해당 allowTaskReparenting 특성이 설정한 값이 액티비티에 적용됩니다. 기본값은 "false"입니다.

일반적으로 액티비티가 시작할 때 액티비티는 시작한 작업과 연결되며 전체 수명 주기 동안 거기에 머무릅니다. 현재 작업이 더 이상 표시되지 않을 때 이 특성을 사용하여 선호하는 작업으로 부모를 강제로 재지정할 수 있습니다. 일반적으로 애플리케이션의 액티비티를 애플리케이션과 연결된 주요 작업으로 이동하게 하는 데 이 특성을 사용합니다.

예를 들어, 이메일 메시지가 웹페이지에 대한 링크를 포함하는 경우 해당 링크를 클릭하면 페이지를 표시할 수 있는 액티비티를 표시합니다. 해당 액티비티는 브라우저 애플리케이션이 정의하지만 이메일 작업의 일부로 시작됩니다. 액티비티 부모를 브라우저 작업으로 재지정할 경우 액티비티는 브라우저가 다음에 앞으로 올 때 표시되며 이메일 작업이 다시 앞으로 올 때 표시되지 않습니다.

액티비티의 인척 관계는 taskAffinity 특성이 정의합니다. 작업의 인척 관계는 루트 액티비티의 인척 관계를 읽음으로써 결정합니다. 따라서 정의상 루트 액티비티는 항상 인척 관계가 동일한 작업에 있습니다. "singleTask" 또는 "singleInstance" 시작 모드 액티비티는 작업 루트에만 있을 수 있으므로 부모 재지정은 "standard" 및 "singleTop" 모드로 제한됩니다. (launchMode 특성도 참조하세요.)

android:alwaysRetainTaskState
시스템이 액티비티의 작업 상태를 항상 유지 관리하는지 여부를 나타내는데, 이 값이 "true"인 경우 항상 유지 관리하며 "false"인 경우 시스템이 특정 상황에서 작업을 초기 상태로 다시 설정할 수 있습니다. 기본값은 "false"입니다. 이 특성은 작업의 루트 액티비티에만 적용되며 다른 모든 액티비티에 대해서는 무시됩니다.

일반적으로 시스템은 사용자가 홈 화면에서 작업을 다시 선택하는 특정 상황에서 작업을 지웁니다(루트 액티비티 위 스택에서 모든 액티비티 제거함). 일반적으로 지우기는 사용자가 30분과 같이 특정 시간 동안 작업을 방문하지 않는 경우 수행됩니다.

그러나 이 특성이 "true"인 경우 사용자는 도착 방법에 상관없이 항상 마지막 상태의 작업으로 돌아갑니다. 이는 예컨대 사용자가 손실을 원하지 않는 많은 상태(예: 복수의 열린 탭)가 있는 웹 브라우저와 같은 애플리케이션에서 유용합니다.

android:autoRemoveFromRecents
이 특성을 사용하여 액티비티가 시작한 작업이 작업의 마지막 액티비티가 완료될 때까지 개요 화면에 여전히 있는지 여부를 나타냅니다. 이 값이 true인 경우 작업이 개요 화면에서 자동으로 제거됩니다. 이는 호출자의 FLAG_ACTIVITY_RETAIN_IN_RECENTS 사용을 재정의합니다. 그 값은 "true" 또는 "false"의 부울 값이어야 합니다.
android:banner
연결된 항목에 대한 확장된 그래픽 배너를 제공하는 드로어블 리소스입니다. <activity> 태그와 함께 사용하여 특정 액티비티에 대한 기본 배너를 제공하거나 <application> 태그와 함께 사용하여 모든 애플리케이션 액티비티에 대한 배너를 제공합니다.

시스템은 배너를 사용하여 Android TV 홈 화면에 앱을 나타냅니다. 배너는 홈 화면에만 표시되므로 CATEGORY_LEANBACK_LAUNCHER 인텐트를 처리하는 액티비티가 있는 애플리케이션이 배너를 지정해야 합니다.

이 특성은 이미지를 포함하는 드로어블 리소스(예: "@drawable/banner")에 대한 참조로 설정해야 합니다. 기본 배너는 없습니다.

자세한 내용은 TV UI 패턴 디자인 가이드에 있는 배너와 TV 앱 시작하기에 있는 홈 화면 배너 제공을 참조하세요.

android:clearTaskOnLaunch
홈 화면에서 다시 시작할 때마다 루트 액티비티를 제외한 모든 액티비티를 작업에서 제거할지 여부를 나타내는데, 이 값이 "true"인 경우 항상 루트 액티비티까지 작업을 제거하고, "false"인 경우 그렇지 않습니다. 기본값은 "false"입니다. 이 특성은 새 작업(루트 디렉터리)을 시작하는 액티비티에만 적용되며 해당 작업의 다른 모든 액티비티에 대해서는 무시됩니다.

이 값이 "true"인 경우 사용자가 작업을 다시 시작할 때마다 마지막으로 수행한 작업에 상관없이, 그리고 뒤로 또는 버튼을 눌러 작업 중인 화면을 떠났는지 여부에 상관없이 루트 액티비티로 이동합니다. 이 값이 "false"인 경우 어떤 상황이 되면 경우에 따라 액티비티에서 작업을 지울 수 있습니다(alwaysRetainTaskState 특성 참조).

예를 들어, 누군가가 홈 화면에서 액티비티 P를 시작하고 거기서 액티비티 Q로 이동하고, 다음에 사용자가 을 누른 다음 액티비티 P로 돌아가는 경우를 가정해 봅시다. 일반적으로 사용자는 P 작업에서 가장 마지막으로 수행한 액티비티 Q를 보게 됩니다. 그러나 P가 이 플래그를 "true"로 설정하는 경우 사용자가 화면을 누르고 작업이 백그라운드로 이동하면 그 위의 모든 액티비티(이 경우 Q)가 제거됩니다. 따라서 사용자가 작업으로 돌아가면 P만 보입니다.

이 특성과 allowTaskReparenting이 모두 "true"인 경우 부모를 재지정할 수 있는 액티비티는 인척 관계를 공유하는 작업으로 이동하며, 이때 나머지 액티비티는 위에서 설명한 대로 삭제됩니다.

android:configChanges
액티비티가 처리하는 구성 변경을 나열합니다. 구성 변경이 런타임에 발생하는 경우 기본적으로 액티비티가 종료되었다가 다시 시작하지만 이 특성을 사용하여 구성을 선언하면 액티비티가 다시 시작하는 것을 방지합니다. 그 대신 액티비티는 여전히 실행 상태에 있고 onConfigurationChanged() 메서드가 호출됩니다.

참고: 이 특성은 마지막 수단으로만 사용하고 가급적 사용하지 않아야 합니다. 구성 변경으로 인한 다시 시작을 적절히 처리하는 방법에 대한 자세한 내용은 런타임 변경 처리를 참조하세요.

다음 문자열의 일부 또는 전부는 이 특성에 대한 유효한 값입니다. 값이 여러 개인 경우 '|'로 구분됩니다(예: "locale|navigation|orientation").

설명
"mcc" IMSI 모바일 국가 코드(MCC)가 변경되었습니다. — SIM이 감지되었고 MCC를 업데이트했습니다.
"mnc" IMSI 모바일 네트워크 코드(MNC)가 변경되었습니다. — SIM이 감지되었고 MNC를 업데이트했습니다.
"locale" 로케일이 변경되었습니다. — 사용자가 텍스트를 표시할 새 언어를 선택했습니다.
"touchscreen" 터치스크린이 변경되었습니다. (이는 정상적으로 발생해서는 안 됩니다.)
"keyboard" 키보드 유형이 변경되었습니다. — 예를 들어, 사용자가 외부 키보드에 플러그인했습니다.
"keyboardHidden" 키보드 접근성이 변경되었습니다. — 예를 들어, 사용자가 하드웨어 키보드를 표시했습니다.
"navigation" 탐색 유형(트랙볼/dpad)이 변경되었습니다. (이는 정상적으로 발생해서는 안 됩니다.)
"screenLayout" 화면 레이아웃이 변경되었습니다. — 이는 서로 다른 디스플레이가 활성화되어 발생했을 수 있습니다.
"fontScale" 글꼴 배율 요소가 변경되었습니다. — 사용자가 새 글로벌 글꼴 크기를 선택했습니다.
"uiMode" 사용자 인터페이스 모드가 변경되었습니다. — 이는 사용자가 기기를 책상/차량용 도크에 두거나 야간 모드 변경 시 발생할 수 있습니다. UiModeManager를 참조하세요. API 레벨 8에서 추가되었습니다.
"orientation" 화면 방향이 변경되었습니다. — 사용자가 기기를 회전했습니다.

참고: 애플리케이션이 (minSdkVersiontargetSdkVersion 특성이 선언한) API 레벨 13 이상을 대상으로 하는 경우 기기가 가로 방향과 세로 방향을 전환할 때 변경되는 "screenSize" 구성도 선언해야 합니다.

"screenSize" 사용 가능한 현재 화면 크기가 변경되었습니다. 이는 현재 가로 세로 비율에 비례하는 현재 사용 가능한 크기의 변경을 나타내므로 사용자가 가로 모드와 세로 모드 사이를 전환할 때 변경됩니다. 그러나 애플리케이션이 API 레벨 12 이하를 대상으로 하는 경우 액티비티가 항상 이 구성 변경을 처리합니다. (이 구성 변경은 액티비티를 다시 시작하지 않습니다. 이는 Android 3.2 이상 기기에서 실행되는 경우에도 마찬가지입니다.)

API 레벨 13에서 추가되었습니다.

"smallestScreenSize" 물리적 화면 크기가 변경되었습니다. 이는 방향에 상관없는 크기 변경을 나타내므로 외부 디스플레이로 전환하는 등 실제 물리적 화면 크기가 변경될 때만 변경됩니다. 이 구성에 대한 변경은 smallestWidth 구성 변경에 해당합니다. 그러나 애플리케이션이 API 레벨 12 이하를 대상으로 하는 경우 액티비티가 항상 이 구성 변경을 처리합니다. (이 구성 변경은 액티비티를 다시 시작하지 않습니다. 이는 Android 3.2 이상 기기에서 실행되는 경우에도 마찬가지입니다.)

API 레벨 13에서 추가되었습니다.

"layoutDirection" 레이아웃 방향이 변경되었습니다. 예를 들어, '왼쪽에서 오른쪽으로(LTR)'가 '오른쪽에서 왼쪽으로(RTL)'로 바뀌었습니다. API 레벨 17에서 추가되었습니다.

이와 같은 모든 구성 변경은 애플리케이션이 표시하는 리소스 값에 영향을 미칠 수 있습니다. 따라서 onConfigurationChanged()를 호출할 경우 일반적으로 모든 리소스(예: 뷰 레이아웃, 드로어블 등)를 다시 검색해야 합니다.

android:documentLaunchMode
시작할 때마다 새 액티비티 인스턴스를 작업에 추가하는 방법을 지정합니다. 이 특성을 통해 사용자가 동일한 애플리케이션의 다중 문서를 개요 화면에 표시할 수 있습니다.

이 특성은 사용자가 애플리케이션을 사용하여 문서를 열 때 다음 효과를 생성하는 4개의 값이 있습니다.

설명
"intoExisting" 액티비티가 문서에 대해 기존의 작업을 재사용합니다. 이 값을 사용하는 것은 인텐트 플래그를 사용하여 작업 추가에서 설명한 것과 같이 FLAG_ACTIVITY_MULTIPLE_TASK 플래그를 설정하지 않고 FLAG_ACTIVITY_NEW_DOCUMENT 플래그를 설정하는 것과 동일합니다.
"always" 문서가 이미 열려 있는 경우에도 액티비티가 문서에 대해 새 작업을 생성합니다. 이는 FLAG_ACTIVITY_NEW_DOCUMENTFLAG_ACTIVITY_MULTIPLE_TASK 플래그를 모두 설정하는 것과 같습니다.
"none" 액티비티가 문서에 대해 새 작업을 생성하지 않습니다. 이는 기본값이며, FLAG_ACTIVITY_NEW_TASK를 설정하는 경우에만 새 작업을 생성합니다. 개요 화면은 액티비티를 기본 상태에서와 같이 다룹니다. 즉 앱에 대한 하나의 작업을 표시하며, 이때 사용자가 마지막으로 호출한 작업부터 다시 시작합니다.
"never" 이 액티비티는 인텐트가 FLAG_ACTIVITY_NEW_DOCUMENT를 포함하는 경우에도 새 문서에서 시작되지 않습니다. 이를 설정하면 FLAG_ACTIVITY_NEW_DOCUMENTFLAG_ACTIVITY_MULTIPLE_TASK 플래그 중 하나가 액티비티에 설정되어 있는 경우 해당 플래그의 동작을 재정의하며, 개요 화면은 앱에 대한 단일 작업을 표시하며, 이때 사용자가 마지막으로 호출한 액티비티부터 다시 시작합니다.

참고: "none" 및 "never" 를 제외한 다른 값의 경우 launchMode="standard"를 사용하여 액티비티를 정의해야 합니다. 이 특성을 지정하지 않으면 documentLaunchMode="none"이 사용됩니다.

android:enabled
시스템이 액티비티를 인스턴스화할 수 있는지 여부를 나타냅니다. — 이 값이 "true"인 경우 가능하고 "false"인 경우 불가능합니다. 기본값은 "true"입니다.

<application> 요소는 액티비티를 비롯한 모든 애플리케이션 구성 요소에 적용하는 자신의 enabled 특성을 갖고 있습니다. <application><activity> 특성은 모두 시스템이 액티비티를 인스턴스화할 수 있도록 "true"(기본값)여야 합니다. 둘 중 어느 하나가 "false"인 경우 액티비티를 인스턴스화할 수 없습니다.

android:excludeFromRecents
최근 사용한 애플리케이션 목록을 표시한 개요 화면에서 이 액티비티가 시작한 작업을 제외할지 여부를 나타냅니다. 즉, 이 액티비티가 새 작업의 루트 액티비티인 경우 이 특성은 최근 앱 목록에 해당 작업을 표시하지 않을지 여부를 결정합니다. "true"로 설정하면 작업이 목록에서 제외되고 "false"로 설정하면 포함됩니다. 기본값은 "false"입니다.

android:exported
다른 애플리케이션의 구성 요소가 액티비티를 시작할 수 있는지 여부를 나타냅니다. — 이 값이 "true"인 경우 가능하고 "false"인 경우 불가능합니다. "false"인 경우 동일한 사용자 ID를 사용하는 동일한 애플리케이션의 구성 요소가 액티비티를 시작할 수 있습니다.

기본값은 액티비티가 인텐트 필터를 포함하는지 여부에 따라 다릅니다. 필터가 없는 경우 정확한 클래스 이름을 지정해야 액티비티를 호출할 수 있습니다. 이는 (타인이 클래스 이름을 모르므로) 액티비티가 애플리케이션 내부 용도로만 고안되었음을 암시합니다. 그러므로 이 경우에 기본값은 "false"입니다. 반면에, 필터가 한 개 이상 있는 경우 액티비티가 외부 용도로 고안되었음을 암시하므로 기본값은 "true"입니다.

이 특성은 다른 애플리케이션에 액티비티 노출을 제한하는 유일한 방법이 아닙니다. 액티비티를 호출할 수 있는 외부 엔터티를 제한하는 권한을 사용할 수도 있습니다(permission 특성 참조).

android:finishOnTaskLaunch
사용자가 작업을 다시 시작(홈 화면에서 작업을 선택)할 때마다 액티비티의 기존 인스턴스를 종료할지 여부를 나타냅니다. — 이 값이 "true"인 경우 종료되고 "false"인 경우 종료되지 않습니다. 기본값은 "false"입니다.

이 특성 및 allowTaskReparenting이 모두 "true"인 경우 이 특성이 우선 적용됩니다. 액티비티의 인척 관계는 무시됩니다. 액티비티는 부모를 재지정하지 않고 소멸됩니다.

android:hardwareAccelerated
해당 액티비티에 대해 하드웨어 가속 렌더링을 활성화할지 여부를 나타냅니다. — 이 값이 "true"인 경우 활성화되며 "false"인 경우 활성화되지 않습니다. 기본값은 "false"입니다.

Android 3.0부터 하드웨어 가속 OpenGL 렌더러는 애플리케이션에 사용 가능하며, 대부분의 일반적인 2D 그래픽 작업의 성능이 개선되었습니다. 하드웨어 가속 렌더러를 활성화한 경우 캔버스, 그림판, Xfermode, ColorFilter, 셰이더 및 카메라의 대부분의 작업이 가속됩니다. 따라서 프레임워크의 라이브러리를 명시적으로 이용하지 않는 애플리케이션의 경우에도 애니메이션과 스크롤이 원활하게 작동하고 응답성이 전반적으로 개선됩니다. 하드웨어 가속을 활성화하는 데 필요한 리소스 증가 때문에 앱의 램 사용량이 증가합니다.

모든 OpenGL 2D 작업이 가속되는 것은 아닙니다. 하드웨어 가속 렌더러를 활성화할 경우 오류 없이 렌더러를 사용할 수 있도록 애플리케이션을 테스트하세요.

android:icon
액티비티를 나타내는 아이콘입니다. 화면에 액티비티를 표시해야 하는 경우 아이콘이 사용자에게 표시됩니다. 예를 들어, 작업을 시작하는 액티비티에 대한 아이콘은 런처 창에 표시됩니다. 레이블은 종종 아이콘과 함께 표시됩니다(android:label 특성 참조).

이 특성은 이미지 정의를 포함하는 드로어블 리소스에 대한 참조로 설정해야 합니다. 이 특성을 설정하지 않으면 애플리케이션에 전체적으로 지정된 아이콘이 대신 사용됩니다(<application> 요소의 icon 특성 참조).

여기에 설정했거나 <application> 요소가 설정한 액티비티 아이콘은 모든 액티비티의 인텐트 필터에 대한 기본 아이콘입니다(<intent-filter> 요소의 icon 특성 참조).

android:label
액티비티에 대한 사용자가 읽을 수 있는 레이블입니다. 사용자에게 액티비티를 표시해야 하는 경우 레이블이 화면에 표시됩니다. 레이블은 종종 액티비티 아이콘과 함께 표시됩니다.

이 특성을 설정하지 않으면 전체로서 애플리케이션에 대해 설정한 레이블이 대신 사용됩니다(<application> 요소의 label 특성 참조).

여기에 설정했거나 <application> 요소가 설정한 액티비티 레이블은 모든 액티비티의 인텐트 필터에 대한 기본 레이블입니다(<intent-filter> 요소의 label 특성 참조).

레이블은 사용자 인터페이스의 다른 문자열처럼 현지화할 수 있도록 문자열 리소스에 대한 참조로 설정해야 합니다. 그러나 애플리케이션을 개발하는 동안 편의상 레이블을 원시 문자열로 설정할 수도 있습니다.

android:launchMode
액티비티를 시작하는 방법에 대한 지침입니다. 인텐트를 처리하기 위해 액티비티를 호출할 때 발생하는 것을 결정하도록 Intent 객체에서 액티비티 플래그(FLAG_ACTIVITY_* 상수)와 함께 작동하는 4개의 모드가 있습니다. 그 모드는 다음과 같습니다.

"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" 액티비티의 기존 인스턴스가 스택의 상단이 아니라 대상 작업에 있는 경우 또는 대상 작업이 아니라 스택의 상단에 있는 경우 등 다른 상황에서 새 인스턴스를 생성하여 스택에 푸시합니다.

마찬가지로, 현재 스택에서 액티비티로 위로 탐색하면 부모 액티비티의 시작 모드가 동작을 결정합니다. 부모 액티비티의 시작 모드가 singleTop인 경우 (또는 up 인텐트가 FLAG_ACTIVITY_CLEAR_TOP을 포함하는 경우) 부모는 스택 상단으로 이동하고 상태는 보존됩니다. 부모 액티비티의 onNewIntent() 메서드가 탐색 인텐트를 수신합니다. 부모 액티비티의 시작 모드가 standard인 경우 (그리고 up 인텐트가 FLAG_ACTIVITY_CLEAR_TOP을 포함하지 않는 경우) 현재 액티비티 및 그 부모가 모두 스택에서 갑자기 사라지며 부모 액티비티의 새 인스턴스가 탐색 인텐트를 수신하도록 생성됩니다.

"singleTask" 모드와 "singleInstance" 모드도 다음과 같은 한 가지 점에서 서로 다릅니다. "singleTask" 액티비티는 다른 액티비티가 작업의 일부가 되도록 허용합니다. 이는 항상 작업의 루트에 있지만 다른 액티비티(반드시 "standard" 및 "singleTop" 액티비티)를 해당 작업에서 시작할 수 있습니다. 반면에 "singleInstance" 액티비티는 다른 액티비가 작업의 일부가 되도록 허용하지 않습니다. 해당 액티비티가 그 작업의 유일한 액티비티입니다. 다른 액티비티를 시작하는 경우 해당 액티비티는 FLAG_ACTIVITY_NEW_TASK가 인텐트에 있는 것처럼 다른 작업에 할당됩니다.

사용 사례 시작 모드 다중 인스턴스? 설명
대부분의 액티비티에 대한 일반적인 시작 "standard" 기본값입니다. 시스템이 항상 대상 작업에 새 액티비티 인스턴스를 생성하고 인텐트를 해당 인스턴스로 라우팅합니다.
"singleTop" 조건부 액티비티의 인스턴스가 이미 대상 작업의 맨 위에 존재하는 경우 시스템은 새 액티비티 인스턴스를 생성하는 대신 onNewIntent() 메서드를 호출하여 인텐트를 해당 인스턴스로 라우팅합니다.
특수한 시작
(일반 용도로는 권장되지 않음)
"singleTask" 아니요 시스템이 새 작업의 루트에 액티비티를 생성하고 인텐트를 해당 액티비티로 라우팅합니다. 그러나 액티비티 인스턴스가 이미 존재하는 경우 시스템은 새 인스턴스를 생성하는 대신 onNewIntent() 메서드를 호출하여 인텐트를 기존 인스턴스로 라우팅합니다.
"singleInstance" 아니요 시스템이 인스턴스를 보유하는 작업에서 다른 액티비티를 시작하지 않는 점을 제외하면 "singleTask"와 동일합니다. 액티비티는 항상 해당 작업의 단일 멤버입니다.

위 표에서 보듯이 standard는 기본 모드이며 대부분의 액티비티 유형에 적합합니다. SingleTop도 다수의 액티비티 유형에 유용하고 일반적인 시작 모드입니다. 다른 모드(singleTasksingleInstance)는 대부분의 애플리케이션에 적합하지 않습니다. 왜냐하면 해당 모드는 사용자에게 친숙하지 않은 대부분의 다른 애플리케이션과 매우 다른 상호작용 모델이기 때문입니다.

선택한 시작 모드와 상관없이 시작 동안 그리고 뒤로 버튼을 사용하여 다른 액티비티 및 작업에서 뒤로 탐색할 때 액티비티의 사용성을 테스트하세요.

시작 모드 및 인텐트 플래그와의 상호작용에 대한 자세한 내용은 작업 및 백 스택 문서를 참조하세요.

android:maxRecents
개요 화면에서 이 액티비티에 루트로 지정된 작업의 최대 개수입니다. 이 항목 개수에 도달하면 시스템이 가장 오래 전에 사용한 인스턴스를 개요 화면에서 제거합니다. 유효한 값은 1-50입니다(메모리가 적은 기기의 경우 최대 25). 0은 유효하지 않습니다. 이 값은 정수여야 합니다(예: 50). 기본값은 16입니다.
android:multiprocess
액티비티 인스턴스를 시작한 구성 요소의 프로세스에서 액티비티 인스턴스를 시작할 수 있는지 여부를 나타냅니다. 이 값이 "true"인 가능하고 "false"인 경우 불가능합니다. 기본값은 "false"입니다.

일반적으로 새 액티비티 인스턴스는 해당 액티비티 인스턴스를 정의한 애플리케이션의 프로세스에서 시작하므로 모든 액티비티 인스턴스가 동일한 프로세스에서 실행됩니다. 그러나 이 플래그를 "true"로 설정하는 경우 액티비티 인스턴스는 다중 프로세스에서 실행될 수 있으며, 시스템이 사용되는 곳에 상관없이 인스턴스를 생성할 수 있습니다(권한이 있는 경우). 이는 거의 필요하지 않거나 바람직하지 않습니다.

android:name
액티비티를 구현하는 클래스(Activity의 서브클래스)의 이름입니다. 이 특성 값은 정규화된 클래스 이름(예: "com.example.project.ExtracurricularActivity")이어야 합니다. 그러나 요컨대 이름의 첫 문자가 마침표인 경우(예: ".ExtracurricularActivity") <manifest> 요소에 지정된 패키지이름에 추가됩니다.

애플리케이션을 게시한 개발자는 (android:exported="false"를 설정하지 않은 경우) 이 이름을 변경해서는 안 됩니다.

기본값은 없습니다. 이름을 지정해야 합니다.

android:noHistory
사용자가 액티비티 밖으로 탐색하고 화면에 액티비티가 더 이상 표시되지 않을 때 액티비티 스택에서 액티비티를 제거하고 종료(finish() 메서드 호출)하는지 여부를 나타냅니다. 이 값이 "true"인 경우 종료되고 "false"인 경우 종료되지 않습니다. 기본값은 "false"입니다.

값이 "true"인 경우 액티비티가 기록 추적을 남기지 않습니다. 액티비티는 작업에 대한 액티비티 스택에 머무르지 않으므로 사용자는 돌아갈 수 없습니다. 이 경우 이 액티비티의 결과에 대한 다른 액티비티를 시작하면 onActivityResult()를 호출하지 않습니다.

이 특성은 API 레벨 3에서 도입되었습니다.

android:parentActivityName
액티비티의 논리적 부모의 클래스 이름입니다. 이 이름은 해당 <activity> 요소의 android:name 특성에 주어진 클래스 이름과 일치해야 합니다.

시스템은 이 특성을 읽고 사용자가 작업 모음에서 위로 버튼을 누르면 시작하는 액티비티를 결정합니다. 또한 시스템은 이 정보를 사용하여 액티비티의 백 스택을 TaskStackBuilder와 합성할 수 있습니다.

API 레벨 4-16을 지원하도록 "android.support.PARENT_ACTIVITY" 값을 지정하는 <meta-data> 요소를 사용하여 부모 액티비티를 선언할 수도 있습니다. 예를 들면, 다음과 같습니다.

<activity
    android:name="com.example.app.ChildActivity"
    android:label="@string/title_child_activity"
    android:parentActivityName="com.example.app.MainActivity" >
    <!-- Parent activity meta-data to support API level 4+ -->
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.app.MainActivity" />
</activity>

위로 탐색을 지원하는 부모 액티비티 선언에 대한 자세한 내용은 위로 탐색 제공을 참조하세요.

이 특성은 API 레벨 16에서 도입되었습니다.

android:permission
클라이언트가 액티비티를 시작하거나 인텐트에 응답하는 데 필요한 권한의 이름입니다. startActivity() 또는 startActivityForResult() 호출자가 지정된 권한이 없는 경우 인텐트는 액티비티에 제공되지 않습니다.

이 특성을 설정하지 않는 경우 <application> 요소의 permission 특성이 설정한 권한이 액티비티에 적용됩니다. 둘 중 어느 특성도 설정하지 않은 경우 권한이 액티비티를 보호하지 않습니다.

권한에 대한 자세한 내용은 소개에 있는 권한 절과 다른 문서인 보안 및 권한을 참조하세요.

android:process
액티비티가 실행해야 하는 프로세스의 이름입니다. 일반적으로 애플리케이션의 모든 구성 요소는 애플리케이션에 대해 생성된 기본 프로세스 이름으로 실행되므로 이 특성을 사용할 필요가 없습니다. 그러나 필요한 경우 이 특성을 사용하여 기본 프로세스 이름을 재정의할 수 있으며 앱 구성 요소를 다중 프로세스에 분배할 수 있습니다.

이 특성에 할당되는 이름이 콜론(':')으로 시작하는 경우 애플리케이션 전용 새 프로세스가 필요할 때 생성되며 액티비티가 해당 프로세스에서 실행됩니다. 프로세스 이름이 소문자로 시작하는 경우 액티비티는 권한이 부여되면 해당 이름의 전역 프로세스에서 실행됩니다. 따라서 서로 다른 애플리케이션의 구성 요소가 프로세스를 공유할 수 있으므로 리소스 사용량을 줄입니다.

<application> 요소의 process 특성은 모든 구성 요소에 대해 서로 다른 기본 프로세스 이름을 설정할 수 있습니다.

android:relinquishTaskIdentity
액티비티가 작업 스택에서 상위 액티비티에 대한 작업 식별자를 포기하는지 여부를 나타냅니다. 이 특성을 "true"로 설정한 루트 액티비티의 작업은 기본 인텐트를 작업의 다음 액티비티의 인텐트로 대체합니다. 다음 액티비티도 이 특성을 "true"로 설정한 경우 동일한 작업에서 시작한 액티비티에 기본 인텐트를 양도합니다. 이는 이 특성을 "false"로 설정한 액티비티가 나올 때까지 각 액티비티에 대해 계속 적용됩니다. 기본값은 "false"입니다.

또한 이 특성이 "true"로 설정된 경우 액티비티가 ActivityManager.TaskDescription을 사용하여 개요 화면에서 레이블, 색상 및 아이콘을 변경할 수 있습니다.

resizeableActivity

앱이 다중 창 표시를 지원하는지 여부를 지정합니다. <activity> 또는 <application> 요소에서 이 특성을 설정할 수 있습니다.

이 특성을 true로 설정하면 사용자가 액티비티를 화면 분할 모드 및 자유형 모드로 시작할 수 있습니다. 이 특성을 false로 설정하면 액티비티가 다중 창 모드를 지원하지 않습니다. 이 값이 false이고 사용자가 다중 창 모드에서 액티비티를 시작하려고 시도하면, 액티비티가 전체 화면을 차지합니다.

앱이 API 레벨 24 이상을 대상으로 하지만 이 특성 값을 지정하지 않은 경우 이 특성의 기본값은 true가 됩니다.

이 특성은 API 레벨 24에서 추가되었습니다.

android:screenOrientation
기기에서 액티비티의 디스플레이 방향을 나타냅니다. 액티비티가 다중 창 모드로 실행 중인 경우 시스템은 이 특성을 무시합니다.

이 값은 다음 문자열 중 하나일 수 있습니다.

"unspecified" 기본값입니다. 시스템이 방향을 선택합니다. 시스템이 사용하는 정책과 특정 컨텍스트에서 이루어지는 선택은 기기마다 다를 수 있습니다.
"behind" 액티비티 스택에서 바로 아래에 있는 액티비티와 동일한 방향입니다.
"landscape" 가로 방향입니다(디스플레이의 높이보다 너비가 더 긺).
"portrait" 세로 방향입니다(디스플레이의 너비보다 높이가 더 긺).
"reverseLandscape" 반전된 가로 방향입니다. API 레벨 9에서 추가되었습니다.
"reversePortrait" 반전된 세로 방향입니다. API 레벨 9에서 추가되었습니다.
"sensorLandscape" 기기 센서에 따라 정상적인 가로 방향 또는 반전된 가로 방향이 될 수 있습니다. API 레벨 9에서 추가되었습니다.
"sensorPortrait" 기기 센서에 따라 정상적인 세로 방향 또는 반전된 세로 방향이 될 수 있습니다. API 레벨 9에서 추가되었습니다.
"userLandscape" 기기 센서 및 사용자의 센서 기본 설정에 따라 정상적인 가로 방향 또는 반전된 가로 방향이 될 수 있습니다. 사용자가 센서 기반 회전을 잠금 설정한 경우 landscape와 동일하게 작동하고, 잠금 설정을 하지 않은 경우 sensorLandscape와 동일하게 작동합니다. API 레벨 18에서 추가되었습니다.
"userPortrait" 기기 센서 및 사용자의 센서 기본 설정에 따라 정상적인 세로 방향 또는 반전된 세로 방향이 될 수 있습니다. 사용자가 센서 기반 회전을 잠금 설정한 경우 portrait와 동일하게 작동하고, 잠금 설정을 하지 않은 경우 sensorPortrait와 동일하게 작동합니다. API 레벨 18에서 추가되었습니다.
"sensor" 기기 방향 센서가 방향을 결정합니다. 디스플레이 방향은 사용자가 기기를 잡고 있는 방법에 따라 다르며 사용자가 기기를 회전할 때 변경됩니다. 그러나 일부 기기는 기본적으로 4개의 모든 방향으로 회전하지 않습니다. 4개의 모든 방향을 허용하려면"fullSensor"를 사용합니다.
"fullSensor" 기기 방향 센서가 4개의 방향을 결정합니다. 이는 4개의 화면 방향을 허용한다는 것을 제외하면 기기가 정상적으로 수행하는 것과 상관없이 "sensor"와 유사합니다. (예를 들어, 일부 기기는 세로 반전 또는 가로 반전을 정상적으로 사용하지 않지만 이 특성은 정상적으로 사용합니다.) API 레벨 9에서 추가되었습니다.
"nosensor" 물리적 방향 센서를 참조하지 않고 방향을 결정합니다. 센서가 무시되므로 사용자가 기기를 이동하는 방법에 따라 디스플레이가 회전하지 않습니다. 이 구분을 제외하고 시스템은 "unspecified" 설정에 대한 것과 동일한 정책을 사용하여 방향을 선택합니다.
"user" 사용자의 현재 기본 설정 방향입니다.
"fullUser" 사용자가 센서 기반 회전을 잠금 설정한 경우user와 동일하게 작동하고, 잠금 설정을 하지 않은 경우 fullSensor와 동일하게 작동하며 4개의 화면 방향을 허용합니다. API 레벨 18에서 추가되었습니다.
"locked" 현재 회전 방향을 잠금 설정합니다. API 레벨 18에서 추가되었습니다.

참고: 가로 모드 값 또는 세로 모드 값을 선언할 때 이는 액티비티가 실행하는 방향에 대한 어려운 요구사항으로 간주됩니다. 따라서 선언한 값은 애플리케이션이 액티비티가 필요로 하는 방향을 지원하는 기기에만 사용 가능하도록 Google Play와 같은 서비스가 제공하는 필터링을 활성화합니다. 예를 들어, "landscape", "reverseLandscape" 또는 "sensorLandscape"를 선언한 경우 애플리케이션이 가로 방향을 지원하는 기기에만 사용 가능합니다. 그러나 <uses-feature>를 사용하여 애플리케이션이 세로 또는 가로 방향을 필요로 함도 명시적으로 선언해야 합니다. 예를 들어 <uses-feature android:name="android.hardware.screen.portrait"/>와 같습니다. 이는 순전히 Google Play가 제공하는 필터링 동작(및 그것을 지원하는 다른 서비스)이며 플랫폼은 기기가 특정 방향만을 지원할 때 앱 설치 가능성을 제어하지 않습니다.

android:stateNotNeeded
상태를 저장하지 않고 액티비티를 중지했다가 다시 시작할 수 있는지 여부를 나타냅니다. 이 값이 "true"인 경우 이전 상태를 참조하지 않고 다시 시작할 수 있으며 "false"인 경우 이전 상태가 필요합니다. 기본값은 "false"입니다.

일반적으로 리소스를 저장하기 위해 액티비티를 일시적으로 종료하기 전에 onSaveInstanceState() 메서드를 호출합니다. 이 메서드는 Bundle 객체에 액티비티의 현재 상태를 저장하며, 해당 상태는 액티비티가 다시 시작할 때 onCreate()로 전달됩니다. 이 특성이 "true"로 설정된 경우 onSaveInstanceState()은 호출할 수 없으며 액티비티를 처음으로 시작할 때처럼 onCreate()에 번들 대신 null이 전달됩니다.

"true"로 설정한 경우 유지되는 상태가 없을 때 액티비티를 다시 시작할 수 있습니다. 예를 들어, 홈 화면을 표시하는 액티비티는 어떤 이유로 작동이 중단되는 경우 제거되지 않도록 이 설정을 사용합니다.

supportsPictureInPicture

액티비티가 화면 속 화면 표시를 지원하는지 여부를 지정합니다. android:resizeableActivity가 false인 경우 시스템은 이 특성을 무시합니다.

이 특성은 API 레벨 24에서 추가되었습니다.

android:taskAffinity
액티비티가 인척 관계가 있는 작업입니다. 인척 관계가 동일한 액티비티는 개념상 동일한 작업(사용자의 관점에서 동일한 "애플리케이션)에 속합니다. 작업의 인척 관계는 루트 액티비티의 인척 관계가 결정합니다.

인척 관계는 액티비티가 부모로 재지정한 작업(allowTaskReparenting 특성 참조) 및 FLAG_ACTIVITY_NEW_TASK 플래그를 사용하여 시작할 때 액티비티를 수용하는 작업 등 두 개를 결정합니다.

기본적으로 애플리케이션 내 모든 액티비티의 인척 관계는 동일합니다. 액티비티를 서로 다르게 그룹화하도록 이 특성을 설정할 수 있으며, 서로 다른 애플리케이션에 정의된 액티비티를 동일한 작업 안에 둘 수도 있습니다. 액티비티가 작업에 대한 인척 관계가 없도록 지정하려면 빈 문자열로 설정하면 됩니다.

이 특성을 설정하지 않으면 액티비티가 애플리케이션에 대해 설정된 인척 관계를 상속합니다(<application> 요소의 taskAffinity 특성 참조). 애플리케이션에 대한 기본 인척 관계의 이름은 <manifest> 요소가 설정한 패키지 이름입니다.

android:theme
액티비티에 대한 전체 테마를 정의하는 스타일 리소스에 대한 참조입니다. 이는 이 테마를 사용하도록 액티비티 컨텍스트를 자동으로 설정하며(setTheme() 참조), (액티비티의 실제 모양과 더 잘 일치하도록) 액티비티가 시작하기 전에 애니메이션을 "시작"하게 할 수도 있습니다.

이 특성을 설정하지 않으면 액티비티가 전체적으로 애플리케이션에 대해 설정된 인척 관계를 상속합니다(피상속자: <application> 요소의 theme 특성). 또한 해당 특성을 설정하지 않으면 기본 시스템 테마가 사용됩니다. 자세한 내용은 스타일 및 테마 개발자 가이드를 참조하세요.

android:uiOptions
액티비티 UI에 대한 추가 옵션입니다.

다음 값 중 하나여야 합니다.

설명
"none"추가 UI 옵션이 없습니다. 이는 기본값입니다.
"splitActionBarWhenNarrow"가로 공간에 제약이 있는 경우(예: 핸드셋에서 세로 모드에 있는 경우) 화면 아래쪽에 바를 추가하여 앱 바(작업 모음이라고도 함)에 작업 항목을 표시합니다. 화면 위쪽의 앱 바에 표시되는 소수의 작업 항목 대신에 앱 바는 작업 항목에 대한 위쪽 탐색 섹션과 아래쪽 바로 분할됩니다. 이는 작업 항목뿐만 아니라 위쪽의 탐색 및 제목 요소에 대해서도 합리적인 공간이 사용 가능하게 합니다. 메뉴 항목은 두 바에 분할되지 않고 항상 함께 표시됩니다.

앱 바에 대한 자세한 내용은 앱 바 추가 교육 과정을 참조하세요.

이 특성은 API 레벨 14에서 추가되었습니다.

android:windowSoftInputMode
액티비티의 주 창이 화상 소프트 키보드를 포함하는 창과 상호작용하는 방법을 나타냅니다. 이 특성에 대한 설정은 다음 두 가지에 영향을 미칩니다.
  • 액티비티가 사용자 주의의 포커스가 될 때 소프트 키보드의 상태(숨김 또는 표시)
  • 소프트 키보드를 위한 공간을 확보하도록 창의 크기를 더 작게 조정할지, 소프트 키보드가 창의 일부를 가릴 때 현재 포커스가 표시되도록 콘텐츠를 이동할지 등 액티비티의 기본 창에 대한 조정

설정은 다음 표에 나열된 값 중 하나이거나 단일 "state..." 값과 단일 "adjust..." 값의 조합이어야 합니다. 두 그룹 중 어느 하나에 복수의 값(예: 복수의 "state..." 값)을 설정하면 정의되지 않은 결과를 도출합니다. 개별 값은 세로 막대(|)로 구분합니다. 예:

<activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >

여기에 설정된 값("stateUnspecified" 및 "adjustUnspecified" 제외)은 테마에 설정된 값을 재정의합니다.

설명
"stateUnspecified" 소프트웨어 키보드의 상태(숨김 또는 표시)를 지정하지 않습니다. 시스템이 적당한 상태를 선택하거나 테마 설정에 의존합니다.

이는 소프트 키보드의 동작에 대한 기본 설정입니다.

"stateUnchanged" 액티비티가 앞으로 나올 때 소프트 키보드가 마지막으로 사용된 상태(숨김 또는 표시)를 유지합니다.
"stateHidden" 사용자가 다른 액티비티를 떠나고 해당 액티비티로 이동하는 방식으로 해당 액티비티를 선택하면 소프트 키보드가 숨겨집니다.
"stateAlwaysHidden" 액티비티의 기본 창에 입력 포커스가 있는 경우 소프트 키보드가 항상 숨겨집니다.
"stateVisible" 일반적으로 적절한 경우(사용자가 액티비티의 주 창으로 이동하는 경우) 소프트 키보드가 표시됩니다.
"stateAlwaysVisible" 사용자가 다른 액티비티를 떠나고 해당 액티비티로 이동하는 방식으로 해당 액티비티를 선택하면 소프트 키보드가 표시됩니다.
"adjustUnspecified" 소프트 키보드를 위한 공간을 확보하도록 액티비티의 기본 창의 크기를 조정하거나, 현재 포커스가 화면에 표시되도록 해당 창의 콘텐츠를 이동할지 여부를 지정하지 않습니다. 해당 창의 콘텐츠가 콘텐츠를 스크롤할 수 있는 레이아웃 뷰를 가지고 있는지 여부에 따라 시스템이 해당 모드 중 하나를 자동으로 선택합니다. 그러한 뷰가 있는 경우 스크롤이 모든 창의 콘텐츠를 더 작은 공간에 표시할 수 있다는 가정하에 해당 창의 크기가 조정됩니다.

이는 기본 창의 동작에 대한 기본 설정입니다.

"adjustResize" 화상 소프트 키보드를 위한 공간을 확보하도록 액티비티의 기본 창의 크기를 항상 조정합니다.
"adjustPan" 소프트 키보드를 위한 공간을 확보하기 위해 액티비티의 기본 창의 크기를 조정하는 작업을 수행하지 않습니다. 그 대신에, 키보드가 현재 포커스를 가리지 않고 사용자가 입력하는 것을 항상 볼 수 있도록 해당 창의 콘텐츠가 자동으로 이동합니다. 이는 사용자가 창의 가려진 부분에 도달하여 상호작용하도록 소프트 키보드를 닫을 필요가 있을 수 있으므로 일반적으로 크기 조정보다 바람직하지 않습니다.

이 특성은 API 레벨 3에서 도입되었습니다.

도입:
API 레벨 3에 추가된 noHistorywindowSoftInputMode을 제외한 모든 특성에 대한 API 레벨 1.
참고 항목:
<application>
<activity-alias>
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.