Save the date! Android Dev Summit is coming to Mountain View, CA on November 7-8, 2018.

構文:
<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
アクティビティを別のアクティビティの子として埋め込み、起動できることを示します。 これは特に、別のアクティビティが所有するディスプレイなどのコンテナに子が存在する場合です。 たとえば、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" の場合は、タスクの直前の操作や、タスクから離れたときに [Back] ボタンまたは [Home] ボタンを押したかどうかにかかわらず、ユーザーが再びタスクを開始するたびにルート アクティビティから開始します。 値が "false" の場合、状況によってはタスクのアクティビティがクリアされることがありますが、常にクリアされるわけではありません(alwaysRetainTaskState 属性をご覧ください)。

たとえば、ホーム画面からアクティビティ P を起動し、そこからアクティビティ Q に移ったとします。ユーザーが [Home] を押して、再びアクティビティ P に戻りました。通常、ユーザーにはアクティビティ Q が表示されます。前回、P のタスクで Q を実行していたからです。 ただし、P でこのフラグが "true" に設定されていると、P をベースにするすべてのアクティビティ(この場合は Q)は、ユーザーが [Home] を押したときに削除され、タスクはバックグラウンドに移動します。 そのためユーザーがタスクに戻ると、P のみが表示されます。

この属性と allowTaskReparenting の両方が "true" の場合、親の再割り当てが可能なアクティビティはすべて、アフィニティを共有するタスクに移動され、残りのアクティビティは上記のとおり削除されます。

android:configChanges
アクティビティで処理する設定変更のリストを指定します。実行時に設定の変更が発生すると、デフォルトではアクティビティはシャットダウンおよび再起動されますが、この属性で設定を宣言しておくと、アクティビティの再起動を防止できます。 代わりに、アクティビティは実行中のままになり、アクティビティの onConfigurationChanged() メソッドが呼び出されます。

注: この属性の使用はなるべく避けて、あくまでも最後の手段として使用する必要があります。 設定変更に伴う再起動を適切に処理する方法については、実行時の変更の処理をご覧ください。

次の文字列はすべて、この属性の有効な値です。複数の値は、'|' で区切ります。たとえば、"locale|navigation|orientation" のようになります。

説明
"mcc"IMSI モバイル カントリーコード(MCC)が変更されました。SIM が検出され、MCC を更新しました。
"mnc"IMSI モバイル ネットワーク コード(MNC)が変更されました。SIM が検出され、MNC を更新しました。
"locale"言語/地域が変更されました。ユーザーが新しい言語を選択しました。テキストをこの言語で表示する必要があります。
"touchscreen"タッチスクリーンが変更されました (これは通常、発生しません)。
"keyboard"キーボードの種類が変更されました。たとえば、ユーザーが外付けキーボードを接続しました。
"keyboardHidden"キーボードのユーザー補助機能が変更されました。たとえば、ユーザーがハードウェア キーボードを表示するよう指定しました。
"navigation"ナビゲーションの種類(トラックボール / D-pad)が変更されました (これは通常、発生しません)。
"screenLayout"画面のレイアウトが変更されました。これは、別のディスプレイがアクティベートされた場合に発生することがあります。
"fontScale"フォントのスケーリング係数が変更されました。ユーザーが新しいグローバル フォントサイズを選択しました。
"uiMode"ユーザー インターフェースのモードが変更されました。これは、ユーザーが端末をデスクドックやカーホルダーに装着したり、ナイトモードに切り替わったときに発生します。 UiModeManager をご覧ください。 API レベル 8 で追加。
"orientation"画面の向きが変更されました。つまり、ユーザーが端末を回転させました。

注: アプリが API レベル 13 以上をターゲットとしている場合は(minSdkVersion 属性と targetSdkVersion 属性で宣言)、"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_DOCUMENT フラグと FLAG_ACTIVITY_MULTIPLE_TASK フラグの両方を設定した場合と同じです。
"none"アクティビティはアクティビティの新しいタスクを作成しません。 これはデフォルト値です。FLAG_ACTIVITY_NEW_TASK が設定されている場合にのみ新しいタスクを作成します。 オーバービュー画面はデフォルトでアクティビティをそのように処理します。アプリに対して 1 つのタスクを表示して、ユーザーが最後に呼び出したアクティビティから再開します。
"never"このアクティビティは、インテントに FLAG_ACTIVITY_NEW_DOCUMENT が含まれていても新しいドキュメントで起動されません。 この値を設定すると、FLAG_ACTIVITY_NEW_DOCUMENT フラグと FLAG_ACTIVITY_MULTIPLE_TASK フラグのいずれかが設定されている場合にその動作をオーバーライドし、オーバービュー画面にはアプリの 1 つのタスクが表示され、ユーザーが最後に呼び出したアクティビティから再開します。

注: "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" です。一方、1 つ以上のフィルタが存在する場合はアクティビティが外部での使用を想定しているため、デフォルト値は "true" です。

この属性は、その他のアプリへのアクティビティの公開を制限する唯一の方法ではありません。 パーミッションを使用して、アクティビティを起動できる外部エンティティを制限することもできます(permission 属性をご覧ください)。

android:finishOnTaskLaunch
ユーザーがタスクを再起動した(ホーム画面でタスクを選択した)ときに、アクティビティの既存のインスタンスをシャットダウン(終了)する必要があるかどうか。シャットダウンする場合は "true"、シャットダウンしない場合は "false" を指定します。 デフォルト値は "false" です。

この属性と allowTaskReparenting の両方が "true" の場合は、この属性が優先されます。 アクティビティのアフィニティは無視されます。 アクティビティの親への再割り当ては行われず、破棄されます。

android:hardwareAccelerated
ハードウェア アクセラレーションによるレンダリングをこのアクティビティに対して有効にするかどうか。有効にする場合は "true"、有効にしない場合は "false" を指定します。 デフォルト値は "false" です。

Android 3.0 以降、アプリはハードウェア アクセラレーションによる OpenGL のレンダリングを使用して、多くの一般的な 2D グラフィック操作のパフォーマンスを改善できるようになりました。 ハードウェア アクセラレーションによるレンダリングを有効にすると、Canvas、ペイント、Xfermode、ColorFilter、シェーダー、カメラのほとんどの操作が高速化されます。その結果、フレームワークの OpenGL ライブラリを明示的に活用していないアプリでも、アニメーションやスクロールが滑らかになり、全体的な応答性が改善されます。 ハードウェア アクセラレーションを有効にすると必要なリソースが増加するため、アプリの RAM の消費が増加します。

すべての OpenGL 2D 操作が高速化されるわけではない点に注意してください。ハードウェア アクセラレーションによるレンダリングを有効にする場合は、必ずアプリをテストして、レンダラーを使用したときにエラーが発生しないことを確認してください。

android:icon
アクティビティを表すアイコン。このアイコンは、画面上でアクティビティを表す必要があるときに、ユーザーに表示されます。 たとえば、タスクを開始するアクティビティのアイコンは、ランチャー ウィンドウに表示されます。アイコンには多くの場合、ラベルが付いています(android:label 属性をご覧ください)。

この属性は、画像の定義を含むドローアブル リソースへの参照として設定する必要があります。 設定されていない場合、アプリ全体に指定されたアイコンが代わりに使用されます(<application> 要素の icon 属性をご覧ください)。

アクティビティのアイコン(ここで設定するか、または <application> 要素で設定)も、すべてのアクティビティのインテント フィルタでデフォルトのアイコンになります(<intent-filter> 要素の icon 属性をご覧ください)。

android:label
ユーザーが読み取り可能なアクティビティのラベル。アクティビティをユーザーに示す必要があるときに、画面上に表示されるラベル。 多くの場合、アクティビティ アイコンとともに表示されます。

この属性が設定されていない場合、アプリ全体に指定されたラベルが代わりに使用されます(<application> 要素の label 属性をご覧ください)。

アクティビティのラベル(ここで設定するか、<application> 要素で設定)も、すべてのアクティビティのインテント フィルタでデフォルトのラベルになります(<intent-filter> 要素の label 属性をご覧ください)。

ラベルは文字列リソースへの参照として設定し、ユーザー インターフェースの他の文字列と同様にローカライズできるようにする必要があります。ただし、アプリの開発中は、利便性を考慮し、未加工の文字列を設定してもかまいません。

android:launchMode
アクティビティの起動方法に関する指示。インテントを処理するためにアクティビティが呼び出されたとき、どう処理するかを判断するため、Intent オブジェクトにはアクティビティ フラグと組み合わせて機能するモードが 4 つあります(FLAG_ACTIVITY_* 定数)。 そのモードは次のとおりです。

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

デフォルトのモードは "standard" です。

以下の表に示すとおり、モードは主に 2 つのグループに分けられます。一方は "standard" アクティビティと "singleTop" アクティビティ、もう一方は "singleTask" アクティビティと "singleInstance" アクティビティです。起動モードに "standard" または "singleTop" を指定したアクティビティは、複数回インスタンス化できます。 インスタンスは任意のタスクに属することができ、アクティビティ スタックのどこにでも配置できます。 通常、アクティビティは startActivity() を呼び出したタスク内で起動されます(インテント オブジェクトに FLAG_ACTIVITY_NEW_TASK 命令が含まれている場合を除く。このような場合は、別のタスクが選択されます。taskAffinity 属性をご覧ください)。

一方、"singleTask" および "singleInstance" アクティビティは、タスクの開始のみ可能です。 これらは通常、アクティビティ スタックのルートに存在します。さらに、端末はアクティビティのインスタンスを一度に 1 つだけ保持できます。タスクは 1 つだけです。

"standard" モードと "singleTop" モードの違いは、1 点だけです。 "standard" アクティビティが新たなインテントを受け取るたびに、クラスの新しいインスタンスが作成され、そのインテントに応答します。各インスタンスは 1 つのインテントを処理します。同様に、"singleTop" アクティビティの新しいインスタンスは、新しいインテントを処理するために作成されることもあります。 しかし、ターゲット タスクのスタックの一番上に、既存のアクティビティのインスタンスが既に存在する場合、そのインスタンスが新しいインテントを受け取ります(onNewIntent() の呼び出し)。新しいインスタンスは作成されません。その他の状況では、たとえば、"singleTop" アクティビティの既存のインスタンスがターゲット タスク内に存在するもののスタックの一番上に配置されていない場合、あるいはスタックの一番上に存在するもののターゲット タスク内ではない場合、新しいインスタンスが作成され、スタック上にプッシュされます。

同様に、現在のスタック上のアクティビティまで UP ナビゲーションを行う場合は、親アクティビティの起動モードによって動作が決まります。 親アクティビティの起動モードが singleTop である(または up インテントに FLAG_ACTIVITY_CLEAR_TOP が含まれる)場合、親がスタックの一番上に移動し、その状態が保持されます。 ナビゲーション インテントは親アクティビティの onNewIntent() メソッドが受け取ります。 親アクティビティの起動モードが standard の場合(さらに up インテントに FLAG_ACTIVITY_CLEAR_TOP が含まれていない場合)、現在のアクティビティとその親はどちらもスタックから消去され、親アクティビティの新しいインスタンスが作成され、ナビゲーション インテントを受け取ります。

"singleTask" モードと "singleInstance" モードの違いも次の 1 点のみです。 "singleTask" アクティビティは、その他のアクティビティを自身のタスクに含めることができます。 このアクティビティは常にタスクのルートに存在しますが、その他のアクティビティ(必然的に "standard" アクティビティと "singleTop" アクティビティ)をそのタスク内で起動できます。 一方、"singleInstance" アクティビティでは、他のアクティビティをタスクに追加することは許可されません。タスク内の唯一のアクティビティになります。 別のアクティビティを開始すると、そのアクティビティは別のタスクに割り当てられます。FLAG_ACTIVITY_NEW_TASK がインテントに存在する場合と同様です。

ユースケース 起動モード 複数のインスタンスがあるか コメント
ほとんどのアクティビティで使用される通常の起動"standard"はいデフォルト。 システムは常に、ターゲット タスク内でアクティビティの新しいインスタンスを作成し、そのインスタンスにインテントを渡します。
"singleTop"条件により異なるアクティビティのインスタンスがターゲット タスクの一番上に既に存在する場合は、システムはアクティビティの新しいインスタンスを作成せずに、onNewIntent() メソッドを呼び出して、インテントをそのインスタンスに渡します。
特別な起動
(一般的な使用には非推奨)
"singleTask"いいえシステムは新しいタスクのルートでアクティビティを作成し、そのアクティビティにインテントを渡します。 ただし、アクティビティのインスタンスが既に存在する場合は、システムは新しいインスタンスを作成せずに、onNewIntent() メソッドを呼び出して、インテントを既存のインスタンスに渡します。
"singleInstance"いいえシステムが、インスタンスを保持しているタスクで他のアクティビティを起動しないことを除いて、"singleTask" と同じです。 アクティビティは常に、そのタスクの唯一のメンバーです。

上記の表のとおり、standard はデフォルトのモードで、ほとんどの種類のアクティビティに適切です。SingleTop も一般的で、多くの種類のアクティビティの起動モードとして便利です。 それ以外のモード( singleTasksingleInstance)は、 ほとんどのアプリには不適切です。その理由は、ユーザーにとってなじみのないインタラクション モデルで、他の大半のアプリとまったく異なるためです。

どの起動モードを選択した場合でも必ず、起動時、および [Back] ボタンを使用して他のアクティビティやタスクから戻ったときのアクティビティのユーザビリティをテストしてください。

起動モードおよびインテント フラグを指定したインタラクションの詳細については、タスクとバックスタックのドキュメントをご覧ください。

android:maxRecents
オーバービュー画面で、このアクティビティをルートとするタスクの最大数。 このエントリ数に達すると、システムは使用時期が最も古いインスタンスをオーバービュー画面から削除します。 有効な値は 1~50(メモリの少ない端末では 25)で、ゼロは無効です。 この値には、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 Level 3 で導入。

android:parentActivityName
アクティビティの論理的な親のクラス名。この名前は、対応する <activity> 要素の android:name 属性に指定したクラス名と一致している必要があります。

ユーザーがアクションバーの Up ボタンを押したときにシステムはこの属性を読み取り、どのアクティビティを開始するかを判断します。 また、システムはこの情報を使用して、アクティビティのバックスタックを 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>

Up ナビゲーションをサポートするための親アクティビティの宣言については、Up ナビゲーションの提供に関する記事をご覧ください。

この属性は API Level 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 つの向きを使用できます。これは "sensor" と似ていますが、端末の通常の動作にかかわらず、4 つの画面の向きを使用できる点が異なります(たとえば、一部の端末では通常、反対の縦向きや反対の横向きは使用しませんが、これにより使用可能になります)。 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() には Bundle ではなく null が渡されます。つまり、初めてそのアクティビティを開始するときと同じです。

"true" を設定すると、状態が保持されていなくてもアクティビティを再開できます。 たとえば、ホーム画面を表示するアクティビティでこの設定を使用すると、なんらかの理由でクラッシュした場合でもアクティビティが削除されることはありません。

supportsPictureInPicture

アクティビティがピクチャ イン ピクチャ ディスプレイをサポートしているかどうかを指定します。 android:resizeableActivity が false の場合、システムはこの属性を無視します。

この属性は API レベル 24 で追加。

android:taskAffinity
アクティビティがアフィニティを持っているタスク。同じアフィニティを持つアクティビティは概念上、同じタスク(ユーザーから見ると同じ「アプリ」)に属します。 タスクのアフィニティは、タスクのルート アクティビティのアフィニティによって決まります。

アフィニティによって次の 2 つが決まります。アクティビティの親として再割り当てされるタスク(allowTaskReparenting 属性をご覧ください)と、FLAG_ACTIVITY_NEW_TASK フラグを指定されたアクティビティが開始されたときにアクティビティを格納するタスクです。

デフォルトでは、アプリ内のすべてのアクティビティは同じアフィニティを持ちます。この属性を設定してアクティビティをそれぞれグループ化し、別のアプリで定義されたアクティビティを同じタスク内に配置することもできます。 タスクのアフィニティを持たないアクティビティを指定するには、アフィニティに空の文字列を設定します。

この属性が設定されていない場合、アクティビティはアプリに設定されたアフィニティを継承します(<application> 要素の taskAffinity 属性をご覧ください)。 アプリのデフォルトのアフィニティの名前は、<manifest> 要素で設定されたパッケージ名です。

android:theme
アクティビティの全体的なテーマを定義するスタイル リソースの参照。これにより、このテーマを使用するアクティビティのコンテキストが自動的に設定されます(setTheme() をご覧ください)。また、この属性によって、アクティビティの開始前に(アクティビティの外観にうまく適合するように)「開始」のアニメーションが実行される場合があります。

この属性が設定されていない場合、アクティビティはアプリ全体に設定されたテーマを継承します(<application> 要素の theme 属性をご覧ください)。 その属性も設定されていない場合、システムのデフォルトのテーマが使用されます。詳細については、スタイルとテーマのデベロッパー ガイドをご覧ください。

android:uiOptions
アクティビティの UI の追加オプション。

次のいずれかの値を指定する必要があります。

説明
"none"追加の UI オプションはありません。この値がデフォルトです。
"splitActionBarWhenNarrow"(ハンドセットで縦表示にしたときなど)水平方向のスペースが限られるときに、画面の下部にバーを追加して、アプリバー(別名アクションバー)のアクション アイテムを表示します。 画面の上部のアプリバーに少数のアクション アイテムを表示する代わりに、アプリバーを上部のナビゲーション セクションと下部のアクション アイテムのバーに分割します。 これにより、アクション アイテムだけでなく、上部のナビゲーションやタイトル要素にもかなりのスペースを割けるようになります。 メニュー アイテムは 2 本のバーに分割されるのではなく、常にまとめて表示されます。

アプリバーの詳細については、アプリバーの追加のトレーニング クラスをご覧ください。

この属性は API レベル 14 で追加。

android:windowSoftInputMode
アクティビティのメイン ウィンドウが、画面上のソフト キーボードを含むウィンドウにどう対処するか。 この属性の設定は、次の 2 つに影響します。
  • ソフト キーボードの状態。アクティビティにユーザーのフォーカスが移ったとき、ソフト キーボードを非表示にするかどうか。
  • アクティビティのメイン ウィンドウの調整。ソフト キーボードのスペースを確保するためにメイン ウィンドウのサイズを変更して小さくするか、ソフト キーボードでウィンドウの一部が隠れたときに現在のフォーカスを表示できるようにコンテンツをパンニングするか。

この設定には、次の表に記載されたいずれかの値か、または "state..." 値と "adjust..." 値を 1 つずつ組み合わせて指定する必要があります。 いずれかのグループで複数の値(複数の "state..." 値など)を設定した場合の結果は不定です。個々の値は垂直バー(|)で区切ります。 次に例を示します。

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

ここで設定された値("stateUnspecified" と "adjustUnspecified" を除く)は、テーマで設定された値をオーバーライドします。

説明
"stateUnspecified"ソフト キーボードの状態(非表示 / 表示)が指定されていません。 システムは適切な状態を選択するか、テーマの設定に従います。

これはソフト キーボードの動作設定のデフォルトです。

"stateUnchanged"アクティビティがフォアグラウンドに移動したとき、ソフト キーボードは非表示 / 表示にかかわらず前回の状態を維持します。
"stateHidden"ユーザーがアクティビティを選択したとき、つまり、ユーザーが別のアクティビティから離れて戻ったのではなく、そのアクティビティを選んで移動したとき、ソフト キーボードは非表示になります。
"stateAlwaysHidden"アクティビティのメイン ウィンドウに入力のフォーカスがあるとき、ソフト キーボードは常に非表示になります。
"stateVisible"一般的に適切なタイミングで(ユーザーがアクティビティのメイン ウィンドウを選んで移動したとき)ソフト キーボードが表示されます。
"stateAlwaysVisible"ユーザーがアクティビティを選択したとき、つまり、ユーザーが別のアクティビティから離れて戻ったのではなく、そのアクティビティを選んで移動したとき、ソフト キーボードは表示されます。
"adjustUnspecified"アクティビティのメイン ウィンドウのサイズを変更してソフト キーボードのスペースを確保するか、画面上で現在のフォーカスを表示できるようにウィンドウのコンテンツをパンニングするか、指定されていません。 システムは、ウィンドウのコンテンツにコンテンツをスクロールできるレイアウト ビューが存在するかどうかに応じて、これらのモードのうちいずれかを自動的に選択します。 このようなビューが存在する場合、スクロールによってウィンドウのすべてのコンテンツを小さい領域でも表示できると見なされ、ウィンドウのサイズが変更されます。

これはメイン ウィンドウの動作設定のデフォルトです。

"adjustResize"画面上のソフト キーボードのスペースを確保するためにアクティビティのメイン ウィンドウは常にサイズが変更されます。
"adjustPan"画面上のソフト キーボードのスペースを確保するためにアクティビティのメイン ウィンドウのサイズは変更されません。 代わりにウィンドウのコンテンツは自動的にパンニングされ、現在のフォーカスがキーボードで隠されることがないため、ユーザーは入力中の内容を常に見ることができます。 一般にこの方法はサイズ変更に比べると望ましくありません。ユーザーがソフト キーボードを閉じて、ウィンドウの隠れた部分を操作する必要が生じる可能性があるためです。

この属性は API レベル 3 で導入。

導入レベル:
noHistorywindowSoftInputMode は API レベル 3 で追加。それ以外のすべての属性は API レベル 1 で追加。
関連ドキュメント
<application>
<activity-alias>